
.globl  ossl_vaes_vpclmulqdq_capable
.type   ossl_vaes_vpclmulqdq_capable,@function
.align  32
ossl_vaes_vpclmulqdq_capable:
        movq    OPENSSL_ia32cap_P+8(%rip),%rcx

        movq    $6600291188736,%rdx
        xorl    %eax,%eax
        andq    %rdx,%rcx
        cmpq    %rdx,%rcx
        cmoveq  %rcx,%rax
        .byte   0xf3,0xc3
.size   ossl_vaes_vpclmulqdq_capable, .-ossl_vaes_vpclmulqdq_capable
.text
.globl  ossl_aes_gcm_init_avx512
.type   ossl_aes_gcm_init_avx512,@function
.align  32
ossl_aes_gcm_init_avx512:
.cfi_startproc
.byte   243,15,30,250
        vpxorq  %xmm16,%xmm16,%xmm16


        movl    240(%rdi),%eax
        cmpl    $9,%eax
        je      .Laes_128_0
        cmpl    $11,%eax
        je      .Laes_192_0
        cmpl    $13,%eax
        je      .Laes_256_0
        jmp     .Lexit_aes_0
.align  32
.Laes_128_0:
        vpxorq  0(%rdi),%xmm16,%xmm16

        vaesenc 16(%rdi),%xmm16,%xmm16

        vaesenc 32(%rdi),%xmm16,%xmm16

        vaesenc 48(%rdi),%xmm16,%xmm16

        vaesenc 64(%rdi),%xmm16,%xmm16

        vaesenc 80(%rdi),%xmm16,%xmm16

        vaesenc 96(%rdi),%xmm16,%xmm16

        vaesenc 112(%rdi),%xmm16,%xmm16

        vaesenc 128(%rdi),%xmm16,%xmm16

        vaesenc 144(%rdi),%xmm16,%xmm16

        vaesenclast     160(%rdi),%xmm16,%xmm16
        jmp     .Lexit_aes_0
.align  32
.Laes_192_0:
        vpxorq  0(%rdi),%xmm16,%xmm16

        vaesenc 16(%rdi),%xmm16,%xmm16

        vaesenc 32(%rdi),%xmm16,%xmm16

        vaesenc 48(%rdi),%xmm16,%xmm16

        vaesenc 64(%rdi),%xmm16,%xmm16

        vaesenc 80(%rdi),%xmm16,%xmm16

        vaesenc 96(%rdi),%xmm16,%xmm16

        vaesenc 112(%rdi),%xmm16,%xmm16

        vaesenc 128(%rdi),%xmm16,%xmm16

        vaesenc 144(%rdi),%xmm16,%xmm16

        vaesenc 160(%rdi),%xmm16,%xmm16

        vaesenc 176(%rdi),%xmm16,%xmm16

        vaesenclast     192(%rdi),%xmm16,%xmm16
        jmp     .Lexit_aes_0
.align  32
.Laes_256_0:
        vpxorq  0(%rdi),%xmm16,%xmm16

        vaesenc 16(%rdi),%xmm16,%xmm16

        vaesenc 32(%rdi),%xmm16,%xmm16

        vaesenc 48(%rdi),%xmm16,%xmm16

        vaesenc 64(%rdi),%xmm16,%xmm16

        vaesenc 80(%rdi),%xmm16,%xmm16

        vaesenc 96(%rdi),%xmm16,%xmm16

        vaesenc 112(%rdi),%xmm16,%xmm16

        vaesenc 128(%rdi),%xmm16,%xmm16

        vaesenc 144(%rdi),%xmm16,%xmm16

        vaesenc 160(%rdi),%xmm16,%xmm16

        vaesenc 176(%rdi),%xmm16,%xmm16

        vaesenc 192(%rdi),%xmm16,%xmm16

        vaesenc 208(%rdi),%xmm16,%xmm16

        vaesenclast     224(%rdi),%xmm16,%xmm16
        jmp     .Lexit_aes_0
.Lexit_aes_0:

        vpshufb SHUF_MASK(%rip),%xmm16,%xmm16

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

        vpshufd $36,%xmm1,%xmm2
        vpcmpeqd        TWOONE(%rip),%xmm2,%xmm2
        vpand   POLY(%rip),%xmm2,%xmm2
        vpxorq  %xmm2,%xmm16,%xmm16

        vmovdqu64       %xmm16,336(%rsi)
        vshufi32x4      $0x00,%ymm16,%ymm16,%ymm4
        vmovdqa %ymm4,%ymm3

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

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



        vmovdqu64       POLY2(%rip),%ymm2

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



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

        vpternlogq      $0x96,%ymm1,%ymm0,%ymm3

        vmovdqu64       %xmm3,320(%rsi)
        vinserti64x2    $1,%xmm16,%ymm3,%ymm4
        vmovdqa64       %ymm4,%ymm5

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

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



        vmovdqu64       POLY2(%rip),%ymm2

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



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

        vpternlogq      $0x96,%ymm1,%ymm0,%ymm4

        vmovdqu64       %ymm4,288(%rsi)

        vinserti64x4    $1,%ymm5,%zmm4,%zmm4


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

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

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



        vmovdqu64       POLY2(%rip),%zmm2

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



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

        vpternlogq      $0x96,%zmm1,%zmm0,%zmm4

        vmovdqu64       %zmm4,224(%rsi)
        vshufi64x2      $0x00,%zmm4,%zmm4,%zmm3

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

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



        vmovdqu64       POLY2(%rip),%zmm2

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



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

        vpternlogq      $0x96,%zmm1,%zmm0,%zmm5

        vmovdqu64       %zmm5,160(%rsi)

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

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



        vmovdqu64       POLY2(%rip),%zmm2

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



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

        vpternlogq      $0x96,%zmm1,%zmm0,%zmm4

        vmovdqu64       %zmm4,96(%rsi)
        vzeroupper
.Labort_init:
        .byte   0xf3,0xc3
.cfi_endproc
.size   ossl_aes_gcm_init_avx512, .-ossl_aes_gcm_init_avx512
.globl  ossl_aes_gcm_setiv_avx512
.type   ossl_aes_gcm_setiv_avx512,@function
.align  32
ossl_aes_gcm_setiv_avx512:
.cfi_startproc
.Lsetiv_seh_begin:
.byte   243,15,30,250
        pushq   %rbx
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbx,-16
.Lsetiv_seh_push_rbx:
        pushq   %rbp
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbp,-24
.Lsetiv_seh_push_rbp:
        pushq   %r12
.cfi_adjust_cfa_offset  8
.cfi_offset     %r12,-32
.Lsetiv_seh_push_r12:
        pushq   %r13
.cfi_adjust_cfa_offset  8
.cfi_offset     %r13,-40
.Lsetiv_seh_push_r13:
        pushq   %r14
.cfi_adjust_cfa_offset  8
.cfi_offset     %r14,-48
.Lsetiv_seh_push_r14:
        pushq   %r15
.cfi_adjust_cfa_offset  8
.cfi_offset     %r15,-56
.Lsetiv_seh_push_r15:










        leaq    0(%rsp),%rbp
.cfi_def_cfa_register   %rbp
.Lsetiv_seh_setfp:

.Lsetiv_seh_prolog_end:
        subq    $820,%rsp
        andq    $(-64),%rsp
        cmpq    $12,%rcx
        je      iv_len_12_init_IV
        vpxor   %xmm2,%xmm2,%xmm2
        movq    %rdx,%r10
        movq    %rcx,%r11
        orq     %r11,%r11
        jz      .L_CALC_AAD_done_1

        xorq    %rbx,%rbx
        vmovdqa64       SHUF_MASK(%rip),%zmm16

.L_get_AAD_loop48x16_1:
        cmpq    $768,%r11
        jl      .L_exit_AAD_loop48x16_1
        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        testq   %rbx,%rbx
        jnz     .L_skip_hkeys_precomputation_2

        vmovdqu64       288(%rsi),%zmm1
        vmovdqu64       %zmm1,704(%rsp)

        vmovdqu64       224(%rsi),%zmm9
        vmovdqu64       %zmm9,640(%rsp)


        vshufi64x2      $0x00,%zmm9,%zmm9,%zmm9

        vmovdqu64       160(%rsi),%zmm10
        vmovdqu64       %zmm10,576(%rsp)

        vmovdqu64       96(%rsi),%zmm12
        vmovdqu64       %zmm12,512(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,256(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,192(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,128(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,64(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,0(%rsp)
.L_skip_hkeys_precomputation_2:
        movq    $1,%rbx
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       0(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       64(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       128(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       192(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

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

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $768,%r11
        je      .L_CALC_AAD_done_1

        addq    $768,%r10
        jmp     .L_get_AAD_loop48x16_1

.L_exit_AAD_loop48x16_1:

        cmpq    $512,%r11
        jl      .L_less_than_32x16_1

        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        testq   %rbx,%rbx
        jnz     .L_skip_hkeys_precomputation_3

        vmovdqu64       288(%rsi),%zmm1
        vmovdqu64       %zmm1,704(%rsp)

        vmovdqu64       224(%rsi),%zmm9
        vmovdqu64       %zmm9,640(%rsp)


        vshufi64x2      $0x00,%zmm9,%zmm9,%zmm9

        vmovdqu64       160(%rsi),%zmm10
        vmovdqu64       %zmm10,576(%rsp)

        vmovdqu64       96(%rsi),%zmm12
        vmovdqu64       %zmm12,512(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,256(%rsp)
.L_skip_hkeys_precomputation_3:
        movq    $1,%rbx
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       256(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       320(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       384(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       448(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $512,%r11
        je      .L_CALC_AAD_done_1

        addq    $512,%r10
        jmp     .L_less_than_16x16_1

.L_less_than_32x16_1:
        cmpq    $256,%r11
        jl      .L_less_than_16x16_1

        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       96(%rsi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       160(%rsi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       224(%rsi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       288(%rsi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $256,%r11
        je      .L_CALC_AAD_done_1

        addq    $256,%r10

.L_less_than_16x16_1:

        leaq    byte64_len_to_mask_table(%rip),%r12
        leaq    (%r12,%r11,8),%r12


        addl    $15,%r11d
        shrl    $4,%r11d
        cmpl    $2,%r11d
        jb      .L_AAD_blocks_1_1
        je      .L_AAD_blocks_2_1
        cmpl    $4,%r11d
        jb      .L_AAD_blocks_3_1
        je      .L_AAD_blocks_4_1
        cmpl    $6,%r11d
        jb      .L_AAD_blocks_5_1
        je      .L_AAD_blocks_6_1
        cmpl    $8,%r11d
        jb      .L_AAD_blocks_7_1
        je      .L_AAD_blocks_8_1
        cmpl    $10,%r11d
        jb      .L_AAD_blocks_9_1
        je      .L_AAD_blocks_10_1
        cmpl    $12,%r11d
        jb      .L_AAD_blocks_11_1
        je      .L_AAD_blocks_12_1
        cmpl    $14,%r11d
        jb      .L_AAD_blocks_13_1
        je      .L_AAD_blocks_14_1
        cmpl    $15,%r11d
        je      .L_AAD_blocks_15_1
.L_AAD_blocks_16_1:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%zmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       96(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       160(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       224(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm9,%zmm11,%zmm1
        vpternlogq      $0x96,%zmm10,%zmm3,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm12,%zmm11,%zmm7
        vpternlogq      $0x96,%zmm13,%zmm3,%zmm8
        vmovdqu64       288(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm5,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm5,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm5,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm5,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_15_1:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%zmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       112(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       176(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       240(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       304(%rsi),%ymm15
        vinserti64x2    $2,336(%rsi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm5,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm5,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm5,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm5,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_14_1:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%ymm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %ymm16,%ymm5,%ymm5
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       128(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       192(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       256(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       320(%rsi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm5,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm5,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm5,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm5,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_13_1:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%xmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %xmm16,%xmm5,%xmm5
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       144(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       208(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       272(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       336(%rsi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm5,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm5,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm5,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm5,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_12_1:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       160(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       224(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       288(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_11_1:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       176(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       240(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       304(%rsi),%ymm15
        vinserti64x2    $2,336(%rsi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_10_1:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%ymm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %ymm16,%ymm4,%ymm4
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       192(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       256(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       320(%rsi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm4,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm4,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm4,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm4,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_9_1:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%xmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %xmm16,%xmm4,%xmm4
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       208(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       272(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       336(%rsi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm4,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm4,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm4,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm4,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_8_1:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       224(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       288(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_7_1:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       240(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       304(%rsi),%ymm15
        vinserti64x2    $2,336(%rsi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_6_1:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%ymm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %ymm16,%ymm3,%ymm3
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       256(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       320(%rsi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm3,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm3,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm3,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm3,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_5_1:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%xmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %xmm16,%xmm3,%xmm3
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       272(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       336(%rsi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm3,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm3,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm3,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm3,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_4_1:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       288(%rsi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_3_1:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       304(%rsi),%ymm15
        vinserti64x2    $2,336(%rsi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_2_1:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%ymm11{%k1}{z}
        vpshufb %ymm16,%ymm11,%ymm11
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       320(%rsi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm11,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm11,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm11,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm11,%ymm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_1
.L_AAD_blocks_1_1:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%xmm11{%k1}{z}
        vpshufb %xmm16,%xmm11,%xmm11
        vpxorq  %zmm2,%zmm11,%zmm11
        vmovdqu64       336(%rsi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm11,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm11,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm11,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm11,%xmm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

.L_CALC_AAD_done_1:
        movq    %rcx,%r10
        shlq    $3,%r10
        vmovq   %r10,%xmm3


        vpxorq  %xmm2,%xmm3,%xmm2

        vmovdqu64       336(%rsi),%xmm1

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

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



        vmovdqu64       POLY2(%rip),%xmm4

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



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

        vpternlogq      $0x96,%xmm3,%xmm11,%xmm2

        vpshufb SHUF_MASK(%rip),%xmm2,%xmm2
        jmp     skip_iv_len_12_init_IV
iv_len_12_init_IV:

        vmovdqu8        ONEf(%rip),%xmm2
        movq    %rdx,%r11
        movl    $0x0000000000000fff,%r10d
        kmovq   %r10,%k1
        vmovdqu8        (%r11),%xmm2{%k1}
skip_iv_len_12_init_IV:
        vmovdqu %xmm2,%xmm1


        movl    240(%rdi),%r10d
        cmpl    $9,%r10d
        je      .Laes_128_4
        cmpl    $11,%r10d
        je      .Laes_192_4
        cmpl    $13,%r10d
        je      .Laes_256_4
        jmp     .Lexit_aes_4
.align  32
.Laes_128_4:
        vpxorq  0(%rdi),%xmm1,%xmm1

        vaesenc 16(%rdi),%xmm1,%xmm1

        vaesenc 32(%rdi),%xmm1,%xmm1

        vaesenc 48(%rdi),%xmm1,%xmm1

        vaesenc 64(%rdi),%xmm1,%xmm1

        vaesenc 80(%rdi),%xmm1,%xmm1

        vaesenc 96(%rdi),%xmm1,%xmm1

        vaesenc 112(%rdi),%xmm1,%xmm1

        vaesenc 128(%rdi),%xmm1,%xmm1

        vaesenc 144(%rdi),%xmm1,%xmm1

        vaesenclast     160(%rdi),%xmm1,%xmm1
        jmp     .Lexit_aes_4
.align  32
.Laes_192_4:
        vpxorq  0(%rdi),%xmm1,%xmm1

        vaesenc 16(%rdi),%xmm1,%xmm1

        vaesenc 32(%rdi),%xmm1,%xmm1

        vaesenc 48(%rdi),%xmm1,%xmm1

        vaesenc 64(%rdi),%xmm1,%xmm1

        vaesenc 80(%rdi),%xmm1,%xmm1

        vaesenc 96(%rdi),%xmm1,%xmm1

        vaesenc 112(%rdi),%xmm1,%xmm1

        vaesenc 128(%rdi),%xmm1,%xmm1

        vaesenc 144(%rdi),%xmm1,%xmm1

        vaesenc 160(%rdi),%xmm1,%xmm1

        vaesenc 176(%rdi),%xmm1,%xmm1

        vaesenclast     192(%rdi),%xmm1,%xmm1
        jmp     .Lexit_aes_4
.align  32
.Laes_256_4:
        vpxorq  0(%rdi),%xmm1,%xmm1

        vaesenc 16(%rdi),%xmm1,%xmm1

        vaesenc 32(%rdi),%xmm1,%xmm1

        vaesenc 48(%rdi),%xmm1,%xmm1

        vaesenc 64(%rdi),%xmm1,%xmm1

        vaesenc 80(%rdi),%xmm1,%xmm1

        vaesenc 96(%rdi),%xmm1,%xmm1

        vaesenc 112(%rdi),%xmm1,%xmm1

        vaesenc 128(%rdi),%xmm1,%xmm1

        vaesenc 144(%rdi),%xmm1,%xmm1

        vaesenc 160(%rdi),%xmm1,%xmm1

        vaesenc 176(%rdi),%xmm1,%xmm1

        vaesenc 192(%rdi),%xmm1,%xmm1

        vaesenc 208(%rdi),%xmm1,%xmm1

        vaesenclast     224(%rdi),%xmm1,%xmm1
        jmp     .Lexit_aes_4
.Lexit_aes_4:

        vmovdqu %xmm1,32(%rsi)


        vpshufb SHUF_MASK(%rip),%xmm2,%xmm2
        vmovdqu %xmm2,0(%rsi)
        cmpq    $256,%rcx
        jbe     .Lskip_hkeys_cleanup_5
        vpxor   %xmm0,%xmm0,%xmm0
        vmovdqa64       %zmm0,0(%rsp)
        vmovdqa64       %zmm0,64(%rsp)
        vmovdqa64       %zmm0,128(%rsp)
        vmovdqa64       %zmm0,192(%rsp)
        vmovdqa64       %zmm0,256(%rsp)
        vmovdqa64       %zmm0,320(%rsp)
        vmovdqa64       %zmm0,384(%rsp)
        vmovdqa64       %zmm0,448(%rsp)
        vmovdqa64       %zmm0,512(%rsp)
        vmovdqa64       %zmm0,576(%rsp)
        vmovdqa64       %zmm0,640(%rsp)
        vmovdqa64       %zmm0,704(%rsp)
.Lskip_hkeys_cleanup_5:
        vzeroupper
        leaq    (%rbp),%rsp
.cfi_def_cfa_register   %rsp
        popq    %r15
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r15
        popq    %r14
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r14
        popq    %r13
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r13
        popq    %r12
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r12
        popq    %rbp
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbp
        popq    %rbx
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbx
.Labort_setiv:
        .byte   0xf3,0xc3
.Lsetiv_seh_end:
.cfi_endproc
.size   ossl_aes_gcm_setiv_avx512, .-ossl_aes_gcm_setiv_avx512
.globl  ossl_aes_gcm_update_aad_avx512
.type   ossl_aes_gcm_update_aad_avx512,@function
.align  32
ossl_aes_gcm_update_aad_avx512:
.cfi_startproc
.Lghash_seh_begin:
.byte   243,15,30,250
        pushq   %rbx
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbx,-16
.Lghash_seh_push_rbx:
        pushq   %rbp
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbp,-24
.Lghash_seh_push_rbp:
        pushq   %r12
.cfi_adjust_cfa_offset  8
.cfi_offset     %r12,-32
.Lghash_seh_push_r12:
        pushq   %r13
.cfi_adjust_cfa_offset  8
.cfi_offset     %r13,-40
.Lghash_seh_push_r13:
        pushq   %r14
.cfi_adjust_cfa_offset  8
.cfi_offset     %r14,-48
.Lghash_seh_push_r14:
        pushq   %r15
.cfi_adjust_cfa_offset  8
.cfi_offset     %r15,-56
.Lghash_seh_push_r15:










        leaq    0(%rsp),%rbp
.cfi_def_cfa_register   %rbp
.Lghash_seh_setfp:

.Lghash_seh_prolog_end:
        subq    $820,%rsp
        andq    $(-64),%rsp
        vmovdqu64       64(%rdi),%xmm14
        movq    %rsi,%r10
        movq    %rdx,%r11
        orq     %r11,%r11
        jz      .L_CALC_AAD_done_6

        xorq    %rbx,%rbx
        vmovdqa64       SHUF_MASK(%rip),%zmm16

.L_get_AAD_loop48x16_6:
        cmpq    $768,%r11
        jl      .L_exit_AAD_loop48x16_6
        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        testq   %rbx,%rbx
        jnz     .L_skip_hkeys_precomputation_7

        vmovdqu64       288(%rdi),%zmm1
        vmovdqu64       %zmm1,704(%rsp)

        vmovdqu64       224(%rdi),%zmm9
        vmovdqu64       %zmm9,640(%rsp)


        vshufi64x2      $0x00,%zmm9,%zmm9,%zmm9

        vmovdqu64       160(%rdi),%zmm10
        vmovdqu64       %zmm10,576(%rsp)

        vmovdqu64       96(%rdi),%zmm12
        vmovdqu64       %zmm12,512(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,256(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,192(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,128(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,64(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,0(%rsp)
.L_skip_hkeys_precomputation_7:
        movq    $1,%rbx
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       0(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       64(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       128(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       192(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

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

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $768,%r11
        je      .L_CALC_AAD_done_6

        addq    $768,%r10
        jmp     .L_get_AAD_loop48x16_6

.L_exit_AAD_loop48x16_6:

        cmpq    $512,%r11
        jl      .L_less_than_32x16_6

        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        testq   %rbx,%rbx
        jnz     .L_skip_hkeys_precomputation_8

        vmovdqu64       288(%rdi),%zmm1
        vmovdqu64       %zmm1,704(%rsp)

        vmovdqu64       224(%rdi),%zmm9
        vmovdqu64       %zmm9,640(%rsp)


        vshufi64x2      $0x00,%zmm9,%zmm9,%zmm9

        vmovdqu64       160(%rdi),%zmm10
        vmovdqu64       %zmm10,576(%rsp)

        vmovdqu64       96(%rdi),%zmm12
        vmovdqu64       %zmm12,512(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm10

        vmovdqu64       %zmm10,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm17

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



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

        vpternlogq      $0x96,%zmm15,%zmm13,%zmm12

        vmovdqu64       %zmm12,256(%rsp)
.L_skip_hkeys_precomputation_8:
        movq    $1,%rbx
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       256(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       320(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       384(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       448(%rsp),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $512,%r11
        je      .L_CALC_AAD_done_6

        addq    $512,%r10
        jmp     .L_less_than_16x16_6

.L_less_than_32x16_6:
        cmpq    $256,%r11
        jl      .L_less_than_16x16_6

        vmovdqu64       0(%r10),%zmm11
        vmovdqu64       64(%r10),%zmm3
        vmovdqu64       128(%r10),%zmm4
        vmovdqu64       192(%r10),%zmm5
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       96(%rdi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm11,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm11,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm11,%zmm12
        vmovdqu64       160(%rdi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm3,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm3,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm3,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm3,%zmm18
        vpxorq  %zmm17,%zmm10,%zmm7
        vpxorq  %zmm13,%zmm1,%zmm6
        vpxorq  %zmm15,%zmm9,%zmm8
        vpternlogq      $0x96,%zmm18,%zmm12,%zmm7
        vmovdqu64       224(%rdi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm19,%zmm4,%zmm9
        vpclmulqdq      $0x01,%zmm19,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm19,%zmm4,%zmm12
        vmovdqu64       288(%rdi),%zmm19
        vpclmulqdq      $0x11,%zmm19,%zmm5,%zmm13
        vpclmulqdq      $0x00,%zmm19,%zmm5,%zmm15
        vpclmulqdq      $0x01,%zmm19,%zmm5,%zmm17
        vpclmulqdq      $0x10,%zmm19,%zmm5,%zmm18

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

        vpsrldq $8,%zmm7,%zmm1
        vpslldq $8,%zmm7,%zmm9
        vpxorq  %zmm1,%zmm6,%zmm6
        vpxorq  %zmm9,%zmm8,%zmm8
        vextracti64x4   $1,%zmm6,%ymm1
        vpxorq  %ymm1,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm1
        vpxorq  %xmm1,%xmm6,%xmm6
        vextracti64x4   $1,%zmm8,%ymm9
        vpxorq  %ymm9,%ymm8,%ymm8
        vextracti32x4   $1,%ymm8,%xmm9
        vpxorq  %xmm9,%xmm8,%xmm8
        vmovdqa64       POLY2(%rip),%xmm10


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


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

        subq    $256,%r11
        je      .L_CALC_AAD_done_6

        addq    $256,%r10

.L_less_than_16x16_6:

        leaq    byte64_len_to_mask_table(%rip),%r12
        leaq    (%r12,%r11,8),%r12


        addl    $15,%r11d
        shrl    $4,%r11d
        cmpl    $2,%r11d
        jb      .L_AAD_blocks_1_6
        je      .L_AAD_blocks_2_6
        cmpl    $4,%r11d
        jb      .L_AAD_blocks_3_6
        je      .L_AAD_blocks_4_6
        cmpl    $6,%r11d
        jb      .L_AAD_blocks_5_6
        je      .L_AAD_blocks_6_6
        cmpl    $8,%r11d
        jb      .L_AAD_blocks_7_6
        je      .L_AAD_blocks_8_6
        cmpl    $10,%r11d
        jb      .L_AAD_blocks_9_6
        je      .L_AAD_blocks_10_6
        cmpl    $12,%r11d
        jb      .L_AAD_blocks_11_6
        je      .L_AAD_blocks_12_6
        cmpl    $14,%r11d
        jb      .L_AAD_blocks_13_6
        je      .L_AAD_blocks_14_6
        cmpl    $15,%r11d
        je      .L_AAD_blocks_15_6
.L_AAD_blocks_16_6:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%zmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       96(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       160(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       224(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm9,%zmm11,%zmm1
        vpternlogq      $0x96,%zmm10,%zmm3,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm12,%zmm11,%zmm7
        vpternlogq      $0x96,%zmm13,%zmm3,%zmm8
        vmovdqu64       288(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm5,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm5,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm5,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm5,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_15_6:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%zmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %zmm16,%zmm5,%zmm5
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       112(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       176(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       240(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       304(%rdi),%ymm15
        vinserti64x2    $2,336(%rdi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm5,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm5,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm5,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm5,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_14_6:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%ymm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %ymm16,%ymm5,%ymm5
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       128(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       192(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       256(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       320(%rdi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm5,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm5,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm5,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm5,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_13_6:
        subq    $1536,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4
        vmovdqu8        192(%r10),%xmm5{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpshufb %xmm16,%xmm5,%xmm5
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       144(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       208(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       272(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13
        vmovdqu64       336(%rdi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm5,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm5,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm5,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm5,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_12_6:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       160(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       224(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vmovdqu64       288(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm1,%zmm11,%zmm9
        vpternlogq      $0x96,%zmm6,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm11
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm3
        vpternlogq      $0x96,%zmm7,%zmm11,%zmm12
        vpternlogq      $0x96,%zmm8,%zmm3,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_11_6:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%zmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %zmm16,%zmm4,%zmm4
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       176(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       240(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       304(%rdi),%ymm15
        vinserti64x2    $2,336(%rdi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm4,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm4,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm4,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm4,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_10_6:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%ymm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %ymm16,%ymm4,%ymm4
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       192(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       256(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       320(%rdi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm4,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm4,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm4,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm4,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_9_6:
        subq    $1024,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3
        vmovdqu8        128(%r10),%xmm4{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpshufb %xmm16,%xmm4,%xmm4
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       208(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       272(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13
        vmovdqu64       336(%rdi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm4,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm4,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm4,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm4,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_8_6:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       224(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vmovdqu64       288(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm13
        vpxorq  %zmm9,%zmm1,%zmm9
        vpxorq  %zmm10,%zmm6,%zmm10
        vpxorq  %zmm12,%zmm7,%zmm12
        vpxorq  %zmm13,%zmm8,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_7_6:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%zmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %zmm16,%zmm3,%zmm3
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       240(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       304(%rdi),%ymm15
        vinserti64x2    $2,336(%rdi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm3,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm3,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm3,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm3,%zmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_6_6:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%ymm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %ymm16,%ymm3,%ymm3
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       256(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       320(%rdi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm3,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm3,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm3,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm3,%ymm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_5_6:
        subq    $512,%r12
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11
        vmovdqu8        64(%r10),%xmm3{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpshufb %xmm16,%xmm3,%xmm3
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       272(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13
        vmovdqu64       336(%rdi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm3,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm3,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm3,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm3,%xmm6

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

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_4_6:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       288(%rdi),%zmm15
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm9
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm10
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm12
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm13

        vpxorq  %zmm13,%zmm12,%zmm12
        vpsrldq $8,%zmm12,%zmm7
        vpslldq $8,%zmm12,%zmm8
        vpxorq  %zmm7,%zmm9,%zmm1
        vpxorq  %zmm8,%zmm10,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_3_6:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%zmm11{%k1}{z}
        vpshufb %zmm16,%zmm11,%zmm11
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       304(%rdi),%ymm15
        vinserti64x2    $2,336(%rdi),%zmm15,%zmm15
        vpclmulqdq      $0x01,%zmm15,%zmm11,%zmm7
        vpclmulqdq      $0x10,%zmm15,%zmm11,%zmm8
        vpclmulqdq      $0x11,%zmm15,%zmm11,%zmm1
        vpclmulqdq      $0x00,%zmm15,%zmm11,%zmm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_2_6:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%ymm11{%k1}{z}
        vpshufb %ymm16,%ymm11,%ymm11
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       320(%rdi),%ymm15
        vpclmulqdq      $0x01,%ymm15,%ymm11,%ymm7
        vpclmulqdq      $0x10,%ymm15,%ymm11,%ymm8
        vpclmulqdq      $0x11,%ymm15,%ymm11,%ymm1
        vpclmulqdq      $0x00,%ymm15,%ymm11,%ymm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

        jmp     .L_CALC_AAD_done_6
.L_AAD_blocks_1_6:
        kmovq   (%r12),%k1
        vmovdqu8        0(%r10),%xmm11{%k1}{z}
        vpshufb %xmm16,%xmm11,%xmm11
        vpxorq  %zmm14,%zmm11,%zmm11
        vmovdqu64       336(%rdi),%xmm15
        vpclmulqdq      $0x01,%xmm15,%xmm11,%xmm7
        vpclmulqdq      $0x10,%xmm15,%xmm11,%xmm8
        vpclmulqdq      $0x11,%xmm15,%xmm11,%xmm1
        vpclmulqdq      $0x00,%xmm15,%xmm11,%xmm6

        vpxorq  %zmm8,%zmm7,%zmm7
        vpsrldq $8,%zmm7,%zmm12
        vpslldq $8,%zmm7,%zmm13
        vpxorq  %zmm12,%zmm1,%zmm1
        vpxorq  %zmm13,%zmm6,%zmm6
        vextracti64x4   $1,%zmm1,%ymm12
        vpxorq  %ymm12,%ymm1,%ymm1
        vextracti32x4   $1,%ymm1,%xmm12
        vpxorq  %xmm12,%xmm1,%xmm1
        vextracti64x4   $1,%zmm6,%ymm13
        vpxorq  %ymm13,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm13
        vpxorq  %xmm13,%xmm6,%xmm6
        vmovdqa64       POLY2(%rip),%xmm15


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


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

.L_CALC_AAD_done_6:
        vmovdqu64       %xmm14,64(%rdi)
        cmpq    $256,%rdx
        jbe     .Lskip_hkeys_cleanup_9
        vpxor   %xmm0,%xmm0,%xmm0
        vmovdqa64       %zmm0,0(%rsp)
        vmovdqa64       %zmm0,64(%rsp)
        vmovdqa64       %zmm0,128(%rsp)
        vmovdqa64       %zmm0,192(%rsp)
        vmovdqa64       %zmm0,256(%rsp)
        vmovdqa64       %zmm0,320(%rsp)
        vmovdqa64       %zmm0,384(%rsp)
        vmovdqa64       %zmm0,448(%rsp)
        vmovdqa64       %zmm0,512(%rsp)
        vmovdqa64       %zmm0,576(%rsp)
        vmovdqa64       %zmm0,640(%rsp)
        vmovdqa64       %zmm0,704(%rsp)
.Lskip_hkeys_cleanup_9:
        vzeroupper
        leaq    (%rbp),%rsp
.cfi_def_cfa_register   %rsp
        popq    %r15
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r15
        popq    %r14
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r14
        popq    %r13
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r13
        popq    %r12
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r12
        popq    %rbp
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbp
        popq    %rbx
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbx
.Lexit_update_aad:
        .byte   0xf3,0xc3
.Lghash_seh_end:
.cfi_endproc
.size   ossl_aes_gcm_update_aad_avx512, .-ossl_aes_gcm_update_aad_avx512
.globl  ossl_aes_gcm_encrypt_avx512
.type   ossl_aes_gcm_encrypt_avx512,@function
.align  32
ossl_aes_gcm_encrypt_avx512:
.cfi_startproc
.Lencrypt_seh_begin:
.byte   243,15,30,250
        pushq   %rbx
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbx,-16
.Lencrypt_seh_push_rbx:
        pushq   %rbp
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbp,-24
.Lencrypt_seh_push_rbp:
        pushq   %r12
.cfi_adjust_cfa_offset  8
.cfi_offset     %r12,-32
.Lencrypt_seh_push_r12:
        pushq   %r13
.cfi_adjust_cfa_offset  8
.cfi_offset     %r13,-40
.Lencrypt_seh_push_r13:
        pushq   %r14
.cfi_adjust_cfa_offset  8
.cfi_offset     %r14,-48
.Lencrypt_seh_push_r14:
        pushq   %r15
.cfi_adjust_cfa_offset  8
.cfi_offset     %r15,-56
.Lencrypt_seh_push_r15:










        leaq    0(%rsp),%rbp
.cfi_def_cfa_register   %rbp
.Lencrypt_seh_setfp:

.Lencrypt_seh_prolog_end:
        subq    $1588,%rsp
        andq    $(-64),%rsp


        movl    240(%rdi),%eax
        cmpl    $9,%eax
        je      .Laes_gcm_encrypt_128_avx512
        cmpl    $11,%eax
        je      .Laes_gcm_encrypt_192_avx512
        cmpl    $13,%eax
        je      .Laes_gcm_encrypt_256_avx512
        xorl    %eax,%eax
        jmp     .Lexit_gcm_encrypt
.align  32
.Laes_gcm_encrypt_128_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_10
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_11
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_11
        subq    %r13,%r12
.L_no_extra_mask_11:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_11

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

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



        vmovdqu64       POLY2(%rip),%xmm11

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



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

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_11

.L_partial_incomplete_11:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_11:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)

        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_11:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_10
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_10

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_12
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_12
.L_next_16_overflow_12:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_12:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


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


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_13

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_13:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_10



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_14
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_14
.L_next_16_overflow_14:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_14:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


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


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_15
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_15:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_10
.L_encrypt_big_nblocks_10:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_16
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_16
.L_16_blocks_overflow_16:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_16:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_17
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_17
.L_16_blocks_overflow_17:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_17:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_18
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_18
.L_16_blocks_overflow_18:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_18:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


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

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

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



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_10

.L_no_more_big_nblocks_10:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_10

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_10
.L_encrypt_0_blocks_ghash_32_10:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_19

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_19
        jb      .L_last_num_blocks_is_7_1_19


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_19
        jb      .L_last_num_blocks_is_11_9_19


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_19
        ja      .L_last_num_blocks_is_16_19
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_19
        jmp     .L_last_num_blocks_is_13_19

.L_last_num_blocks_is_11_9_19:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_19
        ja      .L_last_num_blocks_is_11_19
        jmp     .L_last_num_blocks_is_9_19

.L_last_num_blocks_is_7_1_19:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_19
        jb      .L_last_num_blocks_is_3_1_19

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_19
        je      .L_last_num_blocks_is_6_19
        jmp     .L_last_num_blocks_is_5_19

.L_last_num_blocks_is_3_1_19:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_19
        je      .L_last_num_blocks_is_2_19
.L_last_num_blocks_is_1_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_20
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_20

.L_16_blocks_overflow_20:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_20:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_21





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_21
.L_small_initial_partial_block_21:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


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


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












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_21
.L_small_initial_compute_done_21:
.L_after_reduction_21:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_2_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_22
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_22

.L_16_blocks_overflow_22:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_22:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_23





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_23
.L_small_initial_partial_block_23:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_23:

        orq     %r8,%r8
        je      .L_after_reduction_23
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_23:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_3_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_24
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_24

.L_16_blocks_overflow_24:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_24:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_25





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_25
.L_small_initial_partial_block_25:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_25:

        orq     %r8,%r8
        je      .L_after_reduction_25
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_25:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_4_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_26
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_26

.L_16_blocks_overflow_26:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_26:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_27





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_27
.L_small_initial_partial_block_27:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_27:

        orq     %r8,%r8
        je      .L_after_reduction_27
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_27:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_5_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_28
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_28

.L_16_blocks_overflow_28:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_28:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_29





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_29
.L_small_initial_partial_block_29:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_29:

        orq     %r8,%r8
        je      .L_after_reduction_29
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_29:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_6_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_30
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_30

.L_16_blocks_overflow_30:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_30:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_31





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_31
.L_small_initial_partial_block_31:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_31:

        orq     %r8,%r8
        je      .L_after_reduction_31
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_31:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_7_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_32
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_32

.L_16_blocks_overflow_32:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_32:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_33





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_33
.L_small_initial_partial_block_33:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_33:

        orq     %r8,%r8
        je      .L_after_reduction_33
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_33:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_8_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_34
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_34

.L_16_blocks_overflow_34:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_34:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_35





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_35
.L_small_initial_partial_block_35:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_35:

        orq     %r8,%r8
        je      .L_after_reduction_35
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_35:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_9_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_36
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_36

.L_16_blocks_overflow_36:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_36:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_37





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_37
.L_small_initial_partial_block_37:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_37:

        orq     %r8,%r8
        je      .L_after_reduction_37
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_37:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_10_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_38
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_38

.L_16_blocks_overflow_38:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_38:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_39





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_39
.L_small_initial_partial_block_39:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_39:

        orq     %r8,%r8
        je      .L_after_reduction_39
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_39:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_11_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_40
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_40

.L_16_blocks_overflow_40:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_40:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_41





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_41
.L_small_initial_partial_block_41:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_41:

        orq     %r8,%r8
        je      .L_after_reduction_41
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_41:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_12_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_42
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_42

.L_16_blocks_overflow_42:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_42:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_43





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_43
.L_small_initial_partial_block_43:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_43:

        orq     %r8,%r8
        je      .L_after_reduction_43
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_43:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_13_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_44
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_44

.L_16_blocks_overflow_44:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_44:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_45





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_45
.L_small_initial_partial_block_45:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_45:

        orq     %r8,%r8
        je      .L_after_reduction_45
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_45:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_14_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_46
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_46

.L_16_blocks_overflow_46:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_46:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_47





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_47
.L_small_initial_partial_block_47:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_47:

        orq     %r8,%r8
        je      .L_after_reduction_47
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_47:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_15_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_48
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_48

.L_16_blocks_overflow_48:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_48:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_49





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_49
.L_small_initial_partial_block_49:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_49:

        orq     %r8,%r8
        je      .L_after_reduction_49
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_49:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_16_19:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_50
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_50

.L_16_blocks_overflow_50:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_50:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_51:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_51:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_51:
        jmp     .L_last_blocks_done_19
.L_last_num_blocks_is_0_19:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

.L_last_blocks_done_19:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_10
.L_encrypt_32_blocks_10:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_52
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_52
.L_16_blocks_overflow_52:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_52:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_53
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_53
.L_16_blocks_overflow_53:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_53:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_54

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_54
        jb      .L_last_num_blocks_is_7_1_54


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_54
        jb      .L_last_num_blocks_is_11_9_54


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_54
        ja      .L_last_num_blocks_is_16_54
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_54
        jmp     .L_last_num_blocks_is_13_54

.L_last_num_blocks_is_11_9_54:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_54
        ja      .L_last_num_blocks_is_11_54
        jmp     .L_last_num_blocks_is_9_54

.L_last_num_blocks_is_7_1_54:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_54
        jb      .L_last_num_blocks_is_3_1_54

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_54
        je      .L_last_num_blocks_is_6_54
        jmp     .L_last_num_blocks_is_5_54

.L_last_num_blocks_is_3_1_54:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_54
        je      .L_last_num_blocks_is_2_54
.L_last_num_blocks_is_1_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_55
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_55

.L_16_blocks_overflow_55:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_55:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_56





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_56
.L_small_initial_partial_block_56:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


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


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












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_56
.L_small_initial_compute_done_56:
.L_after_reduction_56:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_2_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_57
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_57

.L_16_blocks_overflow_57:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_57:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_58





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_58
.L_small_initial_partial_block_58:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_58:

        orq     %r8,%r8
        je      .L_after_reduction_58
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_58:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_3_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_59
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_59

.L_16_blocks_overflow_59:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_59:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_60





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_60
.L_small_initial_partial_block_60:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_60:

        orq     %r8,%r8
        je      .L_after_reduction_60
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_60:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_4_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_61
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_61

.L_16_blocks_overflow_61:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_61:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_62





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_62
.L_small_initial_partial_block_62:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_62:

        orq     %r8,%r8
        je      .L_after_reduction_62
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_62:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_5_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_63
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_63

.L_16_blocks_overflow_63:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_63:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_64





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_64
.L_small_initial_partial_block_64:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_64:

        orq     %r8,%r8
        je      .L_after_reduction_64
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_64:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_6_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_65
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_65

.L_16_blocks_overflow_65:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_65:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_66





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_66
.L_small_initial_partial_block_66:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_66:

        orq     %r8,%r8
        je      .L_after_reduction_66
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_66:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_7_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_67
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_67

.L_16_blocks_overflow_67:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_67:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_68





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_68
.L_small_initial_partial_block_68:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_68:

        orq     %r8,%r8
        je      .L_after_reduction_68
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_68:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_8_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_69
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_69

.L_16_blocks_overflow_69:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_69:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_70





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_70
.L_small_initial_partial_block_70:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_70:

        orq     %r8,%r8
        je      .L_after_reduction_70
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_70:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_9_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_71
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_71

.L_16_blocks_overflow_71:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_71:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_72





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_72
.L_small_initial_partial_block_72:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_72:

        orq     %r8,%r8
        je      .L_after_reduction_72
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_72:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_10_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_73
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_73

.L_16_blocks_overflow_73:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_73:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_74





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_74
.L_small_initial_partial_block_74:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_74:

        orq     %r8,%r8
        je      .L_after_reduction_74
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_74:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_11_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_75
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_75

.L_16_blocks_overflow_75:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_75:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_76





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_76
.L_small_initial_partial_block_76:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_76:

        orq     %r8,%r8
        je      .L_after_reduction_76
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_76:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_12_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_77
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_77

.L_16_blocks_overflow_77:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_77:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_78





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_78
.L_small_initial_partial_block_78:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_78:

        orq     %r8,%r8
        je      .L_after_reduction_78
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_78:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_13_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_79
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_79

.L_16_blocks_overflow_79:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_79:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_80





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_80
.L_small_initial_partial_block_80:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_80:

        orq     %r8,%r8
        je      .L_after_reduction_80
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_80:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_14_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_81
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_81

.L_16_blocks_overflow_81:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_81:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_82





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_82
.L_small_initial_partial_block_82:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_82:

        orq     %r8,%r8
        je      .L_after_reduction_82
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_82:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_15_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_83
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_83

.L_16_blocks_overflow_83:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_83:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_84





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_84
.L_small_initial_partial_block_84:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_84:

        orq     %r8,%r8
        je      .L_after_reduction_84
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_84:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_16_54:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_85
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_85

.L_16_blocks_overflow_85:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_85:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_86:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_86:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_86:
        jmp     .L_last_blocks_done_54
.L_last_num_blocks_is_0_54:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

.L_last_blocks_done_54:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_10
.L_encrypt_16_blocks_10:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_87
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_87
.L_16_blocks_overflow_87:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_87:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_88

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_88
        jb      .L_last_num_blocks_is_7_1_88


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_88
        jb      .L_last_num_blocks_is_11_9_88


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_88
        ja      .L_last_num_blocks_is_16_88
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_88
        jmp     .L_last_num_blocks_is_13_88

.L_last_num_blocks_is_11_9_88:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_88
        ja      .L_last_num_blocks_is_11_88
        jmp     .L_last_num_blocks_is_9_88

.L_last_num_blocks_is_7_1_88:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_88
        jb      .L_last_num_blocks_is_3_1_88

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_88
        je      .L_last_num_blocks_is_6_88
        jmp     .L_last_num_blocks_is_5_88

.L_last_num_blocks_is_3_1_88:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_88
        je      .L_last_num_blocks_is_2_88
.L_last_num_blocks_is_1_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_89
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_89

.L_16_blocks_overflow_89:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_89:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_90





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_90
.L_small_initial_partial_block_90:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_90
.L_small_initial_compute_done_90:
.L_after_reduction_90:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_2_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_91
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_91

.L_16_blocks_overflow_91:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_91:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_92





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_92
.L_small_initial_partial_block_92:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_92:

        orq     %r8,%r8
        je      .L_after_reduction_92
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_92:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_3_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_93
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_93

.L_16_blocks_overflow_93:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_93:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_94





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_94
.L_small_initial_partial_block_94:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_94:

        orq     %r8,%r8
        je      .L_after_reduction_94
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_94:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_4_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_95
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_95

.L_16_blocks_overflow_95:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_95:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_96





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_96
.L_small_initial_partial_block_96:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_96:

        orq     %r8,%r8
        je      .L_after_reduction_96
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_96:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_5_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_97
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_97

.L_16_blocks_overflow_97:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_97:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_98





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_98
.L_small_initial_partial_block_98:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_98:

        orq     %r8,%r8
        je      .L_after_reduction_98
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_98:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_6_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_99
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_99

.L_16_blocks_overflow_99:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_99:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_100





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_100
.L_small_initial_partial_block_100:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_100:

        orq     %r8,%r8
        je      .L_after_reduction_100
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_100:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_7_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_101
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_101

.L_16_blocks_overflow_101:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_101:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_102





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_102
.L_small_initial_partial_block_102:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_102:

        orq     %r8,%r8
        je      .L_after_reduction_102
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_102:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_8_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_103
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_103

.L_16_blocks_overflow_103:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_103:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_104





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_104
.L_small_initial_partial_block_104:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_104:

        orq     %r8,%r8
        je      .L_after_reduction_104
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_104:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_9_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_105
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_105

.L_16_blocks_overflow_105:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_105:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_106





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_106
.L_small_initial_partial_block_106:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_106:

        orq     %r8,%r8
        je      .L_after_reduction_106
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_106:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_10_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_107
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_107

.L_16_blocks_overflow_107:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_107:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_108





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_108
.L_small_initial_partial_block_108:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_108:

        orq     %r8,%r8
        je      .L_after_reduction_108
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_108:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_11_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_109
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_109

.L_16_blocks_overflow_109:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_109:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_110





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_110
.L_small_initial_partial_block_110:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_110:

        orq     %r8,%r8
        je      .L_after_reduction_110
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_110:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_12_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_111
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_111

.L_16_blocks_overflow_111:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_111:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_112





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_112
.L_small_initial_partial_block_112:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_112:

        orq     %r8,%r8
        je      .L_after_reduction_112
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_112:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_13_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_113
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_113

.L_16_blocks_overflow_113:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_113:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_114





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_114
.L_small_initial_partial_block_114:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_114:

        orq     %r8,%r8
        je      .L_after_reduction_114
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_114:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_14_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_115
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_115

.L_16_blocks_overflow_115:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_115:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_116





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_116
.L_small_initial_partial_block_116:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_116:

        orq     %r8,%r8
        je      .L_after_reduction_116
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_116:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_15_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_117
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_117

.L_16_blocks_overflow_117:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_117:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_118





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_118
.L_small_initial_partial_block_118:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_118:

        orq     %r8,%r8
        je      .L_after_reduction_118
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_118:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_16_88:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_119
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_119

.L_16_blocks_overflow_119:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_119:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_120:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_120:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_120:
        jmp     .L_last_blocks_done_88
.L_last_num_blocks_is_0_88:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

.L_last_blocks_done_88:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_10

.L_message_below_32_blocks_10:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_121
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_121:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_122

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_122
        jb      .L_last_num_blocks_is_7_1_122


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_122
        jb      .L_last_num_blocks_is_11_9_122


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_122
        ja      .L_last_num_blocks_is_16_122
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_122
        jmp     .L_last_num_blocks_is_13_122

.L_last_num_blocks_is_11_9_122:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_122
        ja      .L_last_num_blocks_is_11_122
        jmp     .L_last_num_blocks_is_9_122

.L_last_num_blocks_is_7_1_122:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_122
        jb      .L_last_num_blocks_is_3_1_122

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_122
        je      .L_last_num_blocks_is_6_122
        jmp     .L_last_num_blocks_is_5_122

.L_last_num_blocks_is_3_1_122:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_122
        je      .L_last_num_blocks_is_2_122
.L_last_num_blocks_is_1_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_123
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_123

.L_16_blocks_overflow_123:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_123:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_124





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_124
.L_small_initial_partial_block_124:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


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


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












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_124
.L_small_initial_compute_done_124:
.L_after_reduction_124:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_2_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_125
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_125

.L_16_blocks_overflow_125:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_125:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_126





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_126
.L_small_initial_partial_block_126:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_126:

        orq     %r8,%r8
        je      .L_after_reduction_126
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_126:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_3_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_127
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_127

.L_16_blocks_overflow_127:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_127:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_128





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_128
.L_small_initial_partial_block_128:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_128:

        orq     %r8,%r8
        je      .L_after_reduction_128
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_128:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_4_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_129
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_129

.L_16_blocks_overflow_129:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_129:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_130





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_130
.L_small_initial_partial_block_130:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_130:

        orq     %r8,%r8
        je      .L_after_reduction_130
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_130:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_5_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_131
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_131

.L_16_blocks_overflow_131:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_131:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_132





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_132
.L_small_initial_partial_block_132:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_132:

        orq     %r8,%r8
        je      .L_after_reduction_132
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_132:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_6_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_133
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_133

.L_16_blocks_overflow_133:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_133:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_134





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_134
.L_small_initial_partial_block_134:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_134:

        orq     %r8,%r8
        je      .L_after_reduction_134
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_134:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_7_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_135
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_135

.L_16_blocks_overflow_135:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_135:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_136





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_136
.L_small_initial_partial_block_136:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_136:

        orq     %r8,%r8
        je      .L_after_reduction_136
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_136:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_8_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_137
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_137

.L_16_blocks_overflow_137:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_137:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_138





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_138
.L_small_initial_partial_block_138:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_138:

        orq     %r8,%r8
        je      .L_after_reduction_138
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_138:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_9_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_139
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_139

.L_16_blocks_overflow_139:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_139:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_140





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_140
.L_small_initial_partial_block_140:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_140:

        orq     %r8,%r8
        je      .L_after_reduction_140
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_140:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_10_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_141
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_141

.L_16_blocks_overflow_141:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_141:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_142





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_142
.L_small_initial_partial_block_142:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_142:

        orq     %r8,%r8
        je      .L_after_reduction_142
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_142:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_11_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_143
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_143

.L_16_blocks_overflow_143:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_143:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_144





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_144
.L_small_initial_partial_block_144:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_144:

        orq     %r8,%r8
        je      .L_after_reduction_144
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_144:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_12_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_145
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_145

.L_16_blocks_overflow_145:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_145:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_146





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_146
.L_small_initial_partial_block_146:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_146:

        orq     %r8,%r8
        je      .L_after_reduction_146
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_146:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_13_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_147
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_147

.L_16_blocks_overflow_147:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_147:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_148





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_148
.L_small_initial_partial_block_148:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_148:

        orq     %r8,%r8
        je      .L_after_reduction_148
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_148:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_14_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_149
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_149

.L_16_blocks_overflow_149:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_149:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_150





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_150
.L_small_initial_partial_block_150:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_150:

        orq     %r8,%r8
        je      .L_after_reduction_150
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_150:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_15_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_151
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_151

.L_16_blocks_overflow_151:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_151:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_152





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_152
.L_small_initial_partial_block_152:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_152:

        orq     %r8,%r8
        je      .L_after_reduction_152
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_152:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_16_122:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_153
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_153

.L_16_blocks_overflow_153:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_153:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_154:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_154:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_154:
        jmp     .L_last_blocks_done_122
.L_last_num_blocks_is_0_122:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

.L_last_blocks_done_122:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_10

.L_message_below_equal_16_blocks_10:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_155
        jl      .L_small_initial_num_blocks_is_7_1_155


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_155
        jl      .L_small_initial_num_blocks_is_11_9_155


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_155
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_155
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_155
        jmp     .L_small_initial_num_blocks_is_13_155

.L_small_initial_num_blocks_is_11_9_155:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_155
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_155
        jmp     .L_small_initial_num_blocks_is_9_155

.L_small_initial_num_blocks_is_7_1_155:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_155
        jl      .L_small_initial_num_blocks_is_3_1_155

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_155
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_155
        jmp     .L_small_initial_num_blocks_is_5_155

.L_small_initial_num_blocks_is_3_1_155:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_155
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_155





.L_small_initial_num_blocks_is_1_155:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_156





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_156
.L_small_initial_partial_block_156:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_156
.L_small_initial_compute_done_156:
.L_after_reduction_156:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_2_155:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_157





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_157
.L_small_initial_partial_block_157:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_157:

        orq     %r8,%r8
        je      .L_after_reduction_157
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_157:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_3_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_158





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_158
.L_small_initial_partial_block_158:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_158:

        orq     %r8,%r8
        je      .L_after_reduction_158
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_158:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_4_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_159





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_159
.L_small_initial_partial_block_159:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_159:

        orq     %r8,%r8
        je      .L_after_reduction_159
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_159:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_5_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %xmm29,%xmm3,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_160





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_160
.L_small_initial_partial_block_160:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_160:

        orq     %r8,%r8
        je      .L_after_reduction_160
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_160:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_6_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %ymm29,%ymm3,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_161





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_161
.L_small_initial_partial_block_161:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_161:

        orq     %r8,%r8
        je      .L_after_reduction_161
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_161:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_7_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_162





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_162
.L_small_initial_partial_block_162:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_162:

        orq     %r8,%r8
        je      .L_after_reduction_162
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_162:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_8_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_163





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_163
.L_small_initial_partial_block_163:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_163:

        orq     %r8,%r8
        je      .L_after_reduction_163
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_163:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_9_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %xmm29,%xmm4,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_164





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_164
.L_small_initial_partial_block_164:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_164:

        orq     %r8,%r8
        je      .L_after_reduction_164
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_164:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_10_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %ymm29,%ymm4,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_165





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_165
.L_small_initial_partial_block_165:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_165:

        orq     %r8,%r8
        je      .L_after_reduction_165
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_165:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_11_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_166





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_166
.L_small_initial_partial_block_166:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_166:

        orq     %r8,%r8
        je      .L_after_reduction_166
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_166:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_12_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_167





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_167
.L_small_initial_partial_block_167:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_167:

        orq     %r8,%r8
        je      .L_after_reduction_167
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_167:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_13_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %xmm29,%xmm5,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_168





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_168
.L_small_initial_partial_block_168:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_168:

        orq     %r8,%r8
        je      .L_after_reduction_168
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_168:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_14_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %ymm29,%ymm5,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_169





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_169
.L_small_initial_partial_block_169:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_169:

        orq     %r8,%r8
        je      .L_after_reduction_169
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_169:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_15_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_170





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_170
.L_small_initial_partial_block_170:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_170:

        orq     %r8,%r8
        je      .L_after_reduction_170
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_170:
        jmp     .L_small_initial_blocks_encrypted_155
.L_small_initial_num_blocks_is_16_155:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_171:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_171:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_171:
.L_small_initial_blocks_encrypted_155:
.L_ghash_done_10:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_10:
        jmp     .Lexit_gcm_encrypt
.align  32
.Laes_gcm_encrypt_192_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_172
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_173
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_173
        subq    %r13,%r12
.L_no_extra_mask_173:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_173

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

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



        vmovdqu64       POLY2(%rip),%xmm11

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



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

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_173

.L_partial_incomplete_173:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_173:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)

        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_173:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_172
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_172

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_174
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_174
.L_next_16_overflow_174:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_174:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


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


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_175

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_175:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_172



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_176
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_176
.L_next_16_overflow_176:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_176:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


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


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_177
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

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

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



        vmovdqu64       POLY2(%rip),%zmm10

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



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

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_177:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_172
.L_encrypt_big_nblocks_172:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_178
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_178
.L_16_blocks_overflow_178:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_178:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_179
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_179
.L_16_blocks_overflow_179:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_179:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_180
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_180
.L_16_blocks_overflow_180:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_180:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


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

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

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



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_172

.L_no_more_big_nblocks_172:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_172

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_172
.L_encrypt_0_blocks_ghash_32_172:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_181

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_181
        jb      .L_last_num_blocks_is_7_1_181


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_181
        jb      .L_last_num_blocks_is_11_9_181


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_181
        ja      .L_last_num_blocks_is_16_181
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_181
        jmp     .L_last_num_blocks_is_13_181

.L_last_num_blocks_is_11_9_181:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_181
        ja      .L_last_num_blocks_is_11_181
        jmp     .L_last_num_blocks_is_9_181

.L_last_num_blocks_is_7_1_181:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_181
        jb      .L_last_num_blocks_is_3_1_181

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_181
        je      .L_last_num_blocks_is_6_181
        jmp     .L_last_num_blocks_is_5_181

.L_last_num_blocks_is_3_1_181:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_181
        je      .L_last_num_blocks_is_2_181
.L_last_num_blocks_is_1_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_182
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_182

.L_16_blocks_overflow_182:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_182:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_183





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_183
.L_small_initial_partial_block_183:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


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


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












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_183
.L_small_initial_compute_done_183:
.L_after_reduction_183:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_2_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_184
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_184

.L_16_blocks_overflow_184:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_184:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_185





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_185
.L_small_initial_partial_block_185:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_185:

        orq     %r8,%r8
        je      .L_after_reduction_185
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_185:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_3_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_186
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_186

.L_16_blocks_overflow_186:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_186:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_187





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_187
.L_small_initial_partial_block_187:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_187:

        orq     %r8,%r8
        je      .L_after_reduction_187
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_187:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_4_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_188
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_188

.L_16_blocks_overflow_188:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_188:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_189





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_189
.L_small_initial_partial_block_189:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_189:

        orq     %r8,%r8
        je      .L_after_reduction_189
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_189:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_5_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_190
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_190

.L_16_blocks_overflow_190:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_190:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_191





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_191
.L_small_initial_partial_block_191:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_191:

        orq     %r8,%r8
        je      .L_after_reduction_191
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_191:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_6_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_192
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_192

.L_16_blocks_overflow_192:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_192:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_193





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_193
.L_small_initial_partial_block_193:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_193:

        orq     %r8,%r8
        je      .L_after_reduction_193
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_193:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_7_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_194
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_194

.L_16_blocks_overflow_194:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_194:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_195





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_195
.L_small_initial_partial_block_195:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_195:

        orq     %r8,%r8
        je      .L_after_reduction_195
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_195:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_8_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_196
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_196

.L_16_blocks_overflow_196:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_196:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_197





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_197
.L_small_initial_partial_block_197:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_197:

        orq     %r8,%r8
        je      .L_after_reduction_197
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_197:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_9_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_198
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_198

.L_16_blocks_overflow_198:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_198:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_199





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_199
.L_small_initial_partial_block_199:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_199:

        orq     %r8,%r8
        je      .L_after_reduction_199
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_199:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_10_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_200
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_200

.L_16_blocks_overflow_200:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_200:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_201





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_201
.L_small_initial_partial_block_201:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_201:

        orq     %r8,%r8
        je      .L_after_reduction_201
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_201:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_11_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_202
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_202

.L_16_blocks_overflow_202:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_202:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_203





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_203
.L_small_initial_partial_block_203:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_203:

        orq     %r8,%r8
        je      .L_after_reduction_203
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_203:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_12_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_204
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_204

.L_16_blocks_overflow_204:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_204:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_205





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_205
.L_small_initial_partial_block_205:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_205:

        orq     %r8,%r8
        je      .L_after_reduction_205
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_205:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_13_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_206
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_206

.L_16_blocks_overflow_206:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_206:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_207





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_207
.L_small_initial_partial_block_207:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

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

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_207:

        orq     %r8,%r8
        je      .L_after_reduction_207
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_207:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_14_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_208
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_208

.L_16_blocks_overflow_208:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_208:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_209





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_209
.L_small_initial_partial_block_209:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_209:

        orq     %r8,%r8
        je      .L_after_reduction_209
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_209:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_15_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_210
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_210

.L_16_blocks_overflow_210:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_210:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_211





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_211
.L_small_initial_partial_block_211:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_211:

        orq     %r8,%r8
        je      .L_after_reduction_211
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_211:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_16_181:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_212
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_212

.L_16_blocks_overflow_212:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_212:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_213:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

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

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

.L_small_initial_compute_done_213:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_213:
        jmp     .L_last_blocks_done_181
.L_last_num_blocks_is_0_181:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

.L_last_blocks_done_181:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_172
.L_encrypt_32_blocks_172:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_214
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_214
.L_16_blocks_overflow_214:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_214:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_215
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_215
.L_16_blocks_overflow_215:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_215:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



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


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



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



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



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


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



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



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

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

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


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


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

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_216

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_216
        jb      .L_last_num_blocks_is_7_1_216


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_216
        jb      .L_last_num_blocks_is_11_9_216


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_216
        ja      .L_last_num_blocks_is_16_216
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_216
        jmp     .L_last_num_blocks_is_13_216

.L_last_num_blocks_is_11_9_216:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_216
        ja      .L_last_num_blocks_is_11_216
        jmp     .L_last_num_blocks_is_9_216

.L_last_num_blocks_is_7_1_216:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_216
        jb      .L_last_num_blocks_is_3_1_216

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_216
        je      .L_last_num_blocks_is_6_216
        jmp     .L_last_num_blocks_is_5_216

.L_last_num_blocks_is_3_1_216:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_216
        je      .L_last_num_blocks_is_2_216
.L_last_num_blocks_is_1_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_217
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_217

.L_16_blocks_overflow_217:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_217:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_218





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_218
.L_small_initial_partial_block_218:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


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


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












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_218
.L_small_initial_compute_done_218:
.L_after_reduction_218:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_2_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_219
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_219

.L_16_blocks_overflow_219:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_219:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_220





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


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

        jmp     .L_small_initial_compute_done_220
.L_small_initial_partial_block_220:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


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


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_220:

        orq     %r8,%r8
        je      .L_after_reduction_220
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_220:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_3_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_221
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_221

.L_16_blocks_overflow_221:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_221:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_222





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_222
.L_small_initial_partial_block_222:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_222:

        orq     %r8,%r8
        je      .L_after_reduction_222
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_222:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_4_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_223
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_223

.L_16_blocks_overflow_223:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_223:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_224





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_224
.L_small_initial_partial_block_224:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_224:

        orq     %r8,%r8
        je      .L_after_reduction_224
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_224:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_5_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_225
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_225

.L_16_blocks_overflow_225:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_225:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_226





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_226
.L_small_initial_partial_block_226:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_226:

        orq     %r8,%r8
        je      .L_after_reduction_226
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_226:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_6_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_227
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_227

.L_16_blocks_overflow_227:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_227:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_228





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_228
.L_small_initial_partial_block_228:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_228:

        orq     %r8,%r8
        je      .L_after_reduction_228
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_228:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_7_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_229
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_229

.L_16_blocks_overflow_229:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_229:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_230





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_230
.L_small_initial_partial_block_230:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_230:

        orq     %r8,%r8
        je      .L_after_reduction_230
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_230:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_8_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_231
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_231

.L_16_blocks_overflow_231:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_231:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_232





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_232
.L_small_initial_partial_block_232:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_232:

        orq     %r8,%r8
        je      .L_after_reduction_232
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_232:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_9_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_233
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_233

.L_16_blocks_overflow_233:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_233:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_234





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_234
.L_small_initial_partial_block_234:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_234:

        orq     %r8,%r8
        je      .L_after_reduction_234
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_234:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_10_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_235
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_235

.L_16_blocks_overflow_235:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_235:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_236





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_236
.L_small_initial_partial_block_236:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_236:

        orq     %r8,%r8
        je      .L_after_reduction_236
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_236:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_11_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_237
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_237

.L_16_blocks_overflow_237:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_237:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_238





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_238
.L_small_initial_partial_block_238:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_238:

        orq     %r8,%r8
        je      .L_after_reduction_238
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_238:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_12_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_239
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_239

.L_16_blocks_overflow_239:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_239:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_240





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_240
.L_small_initial_partial_block_240:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_240:

        orq     %r8,%r8
        je      .L_after_reduction_240
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_240:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_13_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_241
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_241

.L_16_blocks_overflow_241:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_241:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_242





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_242
.L_small_initial_partial_block_242:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_242:

        orq     %r8,%r8
        je      .L_after_reduction_242
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_242:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_14_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_243
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_243

.L_16_blocks_overflow_243:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_243:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_244





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_244
.L_small_initial_partial_block_244:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_244:

        orq     %r8,%r8
        je      .L_after_reduction_244
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_244:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_15_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_245
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_245

.L_16_blocks_overflow_245:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_245:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_246





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_246
.L_small_initial_partial_block_246:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_246:

        orq     %r8,%r8
        je      .L_after_reduction_246
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_246:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_16_216:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_247
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_247

.L_16_blocks_overflow_247:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_247:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_248:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_248:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_248:
        jmp     .L_last_blocks_done_216
.L_last_num_blocks_is_0_216:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_216:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_172
.L_encrypt_16_blocks_172:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_249
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_249
.L_16_blocks_overflow_249:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_249:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_250

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_250
        jb      .L_last_num_blocks_is_7_1_250


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_250
        jb      .L_last_num_blocks_is_11_9_250


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_250
        ja      .L_last_num_blocks_is_16_250
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_250
        jmp     .L_last_num_blocks_is_13_250

.L_last_num_blocks_is_11_9_250:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_250
        ja      .L_last_num_blocks_is_11_250
        jmp     .L_last_num_blocks_is_9_250

.L_last_num_blocks_is_7_1_250:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_250
        jb      .L_last_num_blocks_is_3_1_250

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_250
        je      .L_last_num_blocks_is_6_250
        jmp     .L_last_num_blocks_is_5_250

.L_last_num_blocks_is_3_1_250:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_250
        je      .L_last_num_blocks_is_2_250
.L_last_num_blocks_is_1_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_251
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_251

.L_16_blocks_overflow_251:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_251:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_252





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_252
.L_small_initial_partial_block_252:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_252
.L_small_initial_compute_done_252:
.L_after_reduction_252:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_2_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_253
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_253

.L_16_blocks_overflow_253:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_253:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_254





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_254
.L_small_initial_partial_block_254:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_254:

        orq     %r8,%r8
        je      .L_after_reduction_254
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_254:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_3_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_255
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_255

.L_16_blocks_overflow_255:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_255:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_256





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_256
.L_small_initial_partial_block_256:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_256:

        orq     %r8,%r8
        je      .L_after_reduction_256
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_256:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_4_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_257
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_257

.L_16_blocks_overflow_257:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_257:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_258





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_258
.L_small_initial_partial_block_258:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_258:

        orq     %r8,%r8
        je      .L_after_reduction_258
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_258:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_5_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_259
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_259

.L_16_blocks_overflow_259:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_259:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_260





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_260
.L_small_initial_partial_block_260:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_260:

        orq     %r8,%r8
        je      .L_after_reduction_260
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_260:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_6_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_261
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_261

.L_16_blocks_overflow_261:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_261:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_262





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_262
.L_small_initial_partial_block_262:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_262:

        orq     %r8,%r8
        je      .L_after_reduction_262
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_262:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_7_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_263
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_263

.L_16_blocks_overflow_263:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_263:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_264





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_264
.L_small_initial_partial_block_264:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_264:

        orq     %r8,%r8
        je      .L_after_reduction_264
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_264:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_8_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_265
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_265

.L_16_blocks_overflow_265:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_265:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_266





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_266
.L_small_initial_partial_block_266:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_266:

        orq     %r8,%r8
        je      .L_after_reduction_266
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_266:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_9_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_267
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_267

.L_16_blocks_overflow_267:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_267:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_268





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_268
.L_small_initial_partial_block_268:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_268:

        orq     %r8,%r8
        je      .L_after_reduction_268
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_268:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_10_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_269
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_269

.L_16_blocks_overflow_269:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_269:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_270





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_270
.L_small_initial_partial_block_270:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_270:

        orq     %r8,%r8
        je      .L_after_reduction_270
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_270:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_11_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_271
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_271

.L_16_blocks_overflow_271:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_271:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_272





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_272
.L_small_initial_partial_block_272:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_272:

        orq     %r8,%r8
        je      .L_after_reduction_272
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_272:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_12_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_273
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_273

.L_16_blocks_overflow_273:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_273:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_274





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_274
.L_small_initial_partial_block_274:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_274:

        orq     %r8,%r8
        je      .L_after_reduction_274
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_274:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_13_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_275
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_275

.L_16_blocks_overflow_275:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_275:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_276





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_276
.L_small_initial_partial_block_276:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_276:

        orq     %r8,%r8
        je      .L_after_reduction_276
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_276:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_14_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_277
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_277

.L_16_blocks_overflow_277:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_277:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_278





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_278
.L_small_initial_partial_block_278:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_278:

        orq     %r8,%r8
        je      .L_after_reduction_278
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_278:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_15_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_279
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_279

.L_16_blocks_overflow_279:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_279:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_280





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_280
.L_small_initial_partial_block_280:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_280:

        orq     %r8,%r8
        je      .L_after_reduction_280
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_280:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_16_250:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_281
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_281

.L_16_blocks_overflow_281:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_281:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_282:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_282:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_282:
        jmp     .L_last_blocks_done_250
.L_last_num_blocks_is_0_250:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_250:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_172

.L_message_below_32_blocks_172:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_283
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_283:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_284

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_284
        jb      .L_last_num_blocks_is_7_1_284


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_284
        jb      .L_last_num_blocks_is_11_9_284


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_284
        ja      .L_last_num_blocks_is_16_284
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_284
        jmp     .L_last_num_blocks_is_13_284

.L_last_num_blocks_is_11_9_284:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_284
        ja      .L_last_num_blocks_is_11_284
        jmp     .L_last_num_blocks_is_9_284

.L_last_num_blocks_is_7_1_284:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_284
        jb      .L_last_num_blocks_is_3_1_284

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_284
        je      .L_last_num_blocks_is_6_284
        jmp     .L_last_num_blocks_is_5_284

.L_last_num_blocks_is_3_1_284:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_284
        je      .L_last_num_blocks_is_2_284
.L_last_num_blocks_is_1_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_285
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_285

.L_16_blocks_overflow_285:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_285:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_286





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_286
.L_small_initial_partial_block_286:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_286
.L_small_initial_compute_done_286:
.L_after_reduction_286:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_2_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_287
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_287

.L_16_blocks_overflow_287:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_287:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_288





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_288
.L_small_initial_partial_block_288:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_288:

        orq     %r8,%r8
        je      .L_after_reduction_288
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_288:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_3_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_289
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_289

.L_16_blocks_overflow_289:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_289:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_290





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_290
.L_small_initial_partial_block_290:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_290:

        orq     %r8,%r8
        je      .L_after_reduction_290
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_290:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_4_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_291
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_291

.L_16_blocks_overflow_291:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_291:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_292





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_292
.L_small_initial_partial_block_292:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_292:

        orq     %r8,%r8
        je      .L_after_reduction_292
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_292:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_5_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_293
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_293

.L_16_blocks_overflow_293:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_293:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_294





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_294
.L_small_initial_partial_block_294:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_294:

        orq     %r8,%r8
        je      .L_after_reduction_294
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_294:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_6_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_295
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_295

.L_16_blocks_overflow_295:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_295:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_296





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_296
.L_small_initial_partial_block_296:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_296:

        orq     %r8,%r8
        je      .L_after_reduction_296
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_296:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_7_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_297
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_297

.L_16_blocks_overflow_297:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_297:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_298





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_298
.L_small_initial_partial_block_298:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_298:

        orq     %r8,%r8
        je      .L_after_reduction_298
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_298:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_8_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_299
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_299

.L_16_blocks_overflow_299:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_299:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_300





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_300
.L_small_initial_partial_block_300:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_300:

        orq     %r8,%r8
        je      .L_after_reduction_300
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_300:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_9_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_301
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_301

.L_16_blocks_overflow_301:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_301:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_302





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_302
.L_small_initial_partial_block_302:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_302:

        orq     %r8,%r8
        je      .L_after_reduction_302
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_302:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_10_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_303
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_303

.L_16_blocks_overflow_303:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_303:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_304





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_304
.L_small_initial_partial_block_304:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_304:

        orq     %r8,%r8
        je      .L_after_reduction_304
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_304:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_11_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_305
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_305

.L_16_blocks_overflow_305:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_305:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_306





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_306
.L_small_initial_partial_block_306:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_306:

        orq     %r8,%r8
        je      .L_after_reduction_306
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_306:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_12_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_307
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_307

.L_16_blocks_overflow_307:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_307:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_308





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_308
.L_small_initial_partial_block_308:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_308:

        orq     %r8,%r8
        je      .L_after_reduction_308
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_308:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_13_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_309
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_309

.L_16_blocks_overflow_309:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_309:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_310





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_310
.L_small_initial_partial_block_310:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_310:

        orq     %r8,%r8
        je      .L_after_reduction_310
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_310:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_14_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_311
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_311

.L_16_blocks_overflow_311:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_311:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_312





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_312
.L_small_initial_partial_block_312:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_312:

        orq     %r8,%r8
        je      .L_after_reduction_312
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_312:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_15_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_313
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_313

.L_16_blocks_overflow_313:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_313:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_314





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_314
.L_small_initial_partial_block_314:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_314:

        orq     %r8,%r8
        je      .L_after_reduction_314
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_314:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_16_284:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_315
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_315

.L_16_blocks_overflow_315:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_315:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_316:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_316:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_316:
        jmp     .L_last_blocks_done_284
.L_last_num_blocks_is_0_284:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_284:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_172

.L_message_below_equal_16_blocks_172:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_317
        jl      .L_small_initial_num_blocks_is_7_1_317


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_317
        jl      .L_small_initial_num_blocks_is_11_9_317


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_317
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_317
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_317
        jmp     .L_small_initial_num_blocks_is_13_317

.L_small_initial_num_blocks_is_11_9_317:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_317
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_317
        jmp     .L_small_initial_num_blocks_is_9_317

.L_small_initial_num_blocks_is_7_1_317:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_317
        jl      .L_small_initial_num_blocks_is_3_1_317

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_317
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_317
        jmp     .L_small_initial_num_blocks_is_5_317

.L_small_initial_num_blocks_is_3_1_317:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_317
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_317





.L_small_initial_num_blocks_is_1_317:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_318





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_318
.L_small_initial_partial_block_318:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_318
.L_small_initial_compute_done_318:
.L_after_reduction_318:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_2_317:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_319





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_319
.L_small_initial_partial_block_319:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_319:

        orq     %r8,%r8
        je      .L_after_reduction_319
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_319:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_3_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_320





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_320
.L_small_initial_partial_block_320:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_320:

        orq     %r8,%r8
        je      .L_after_reduction_320
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_320:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_4_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_321





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_321
.L_small_initial_partial_block_321:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_321:

        orq     %r8,%r8
        je      .L_after_reduction_321
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_321:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_5_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %xmm29,%xmm3,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_322





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_322
.L_small_initial_partial_block_322:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_322:

        orq     %r8,%r8
        je      .L_after_reduction_322
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_322:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_6_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %ymm29,%ymm3,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_323





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_323
.L_small_initial_partial_block_323:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_323:

        orq     %r8,%r8
        je      .L_after_reduction_323
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_323:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_7_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_324





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_324
.L_small_initial_partial_block_324:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_324:

        orq     %r8,%r8
        je      .L_after_reduction_324
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_324:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_8_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_325





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_325
.L_small_initial_partial_block_325:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_325:

        orq     %r8,%r8
        je      .L_after_reduction_325
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_325:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_9_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %xmm29,%xmm4,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_326





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_326
.L_small_initial_partial_block_326:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_326:

        orq     %r8,%r8
        je      .L_after_reduction_326
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_326:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_10_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %ymm29,%ymm4,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_327





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_327
.L_small_initial_partial_block_327:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_327:

        orq     %r8,%r8
        je      .L_after_reduction_327
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_327:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_11_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_328





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_328
.L_small_initial_partial_block_328:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_328:

        orq     %r8,%r8
        je      .L_after_reduction_328
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_328:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_12_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_329





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_329
.L_small_initial_partial_block_329:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_329:

        orq     %r8,%r8
        je      .L_after_reduction_329
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_329:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_13_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %xmm29,%xmm5,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_330





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_330
.L_small_initial_partial_block_330:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_330:

        orq     %r8,%r8
        je      .L_after_reduction_330
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_330:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_14_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %ymm29,%ymm5,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_331





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_331
.L_small_initial_partial_block_331:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_331:

        orq     %r8,%r8
        je      .L_after_reduction_331
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_331:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_15_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_332





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_332
.L_small_initial_partial_block_332:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_332:

        orq     %r8,%r8
        je      .L_after_reduction_332
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_332:
        jmp     .L_small_initial_blocks_encrypted_317
.L_small_initial_num_blocks_is_16_317:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_333:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_333:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_333:
.L_small_initial_blocks_encrypted_317:
.L_ghash_done_172:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_172:
        jmp     .Lexit_gcm_encrypt
.align  32
.Laes_gcm_encrypt_256_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_334
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_335
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_335
        subq    %r13,%r12
.L_no_extra_mask_335:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_335

        vpclmulqdq      $0x11,%xmm4,%xmm14,%xmm7
        vpclmulqdq      $0x00,%xmm4,%xmm14,%xmm10
        vpclmulqdq      $0x01,%xmm4,%xmm14,%xmm11
        vpclmulqdq      $0x10,%xmm4,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm14,%xmm14

        vpsrldq $8,%xmm14,%xmm11
        vpslldq $8,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm7,%xmm7
        vpxorq  %xmm10,%xmm14,%xmm14



        vmovdqu64       POLY2(%rip),%xmm11

        vpclmulqdq      $0x01,%xmm14,%xmm11,%xmm10
        vpslldq $8,%xmm10,%xmm10
        vpxorq  %xmm10,%xmm14,%xmm14



        vpclmulqdq      $0x00,%xmm14,%xmm11,%xmm10
        vpsrldq $4,%xmm10,%xmm10
        vpclmulqdq      $0x10,%xmm14,%xmm11,%xmm14
        vpslldq $4,%xmm14,%xmm14

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_335

.L_partial_incomplete_335:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_335:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)

        vpshufb SHUF_MASK(%rip),%xmm3,%xmm3
        vpshufb %xmm5,%xmm3,%xmm3
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_335:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_334
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_334

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_336
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_336
.L_next_16_overflow_336:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_336:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 208(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 224(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_337

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_337:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_334



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_338
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_338
.L_next_16_overflow_338:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_338:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 208(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 224(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_339
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_339:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_334
.L_encrypt_big_nblocks_334:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_340
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_340
.L_16_blocks_overflow_340:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_340:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_341
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_341
.L_16_blocks_overflow_341:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_341:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_342
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_342
.L_16_blocks_overflow_342:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_342:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm6
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_334

.L_no_more_big_nblocks_334:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_334

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_334
.L_encrypt_0_blocks_ghash_32_334:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_343

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_343
        jb      .L_last_num_blocks_is_7_1_343


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_343
        jb      .L_last_num_blocks_is_11_9_343


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_343
        ja      .L_last_num_blocks_is_16_343
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_343
        jmp     .L_last_num_blocks_is_13_343

.L_last_num_blocks_is_11_9_343:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_343
        ja      .L_last_num_blocks_is_11_343
        jmp     .L_last_num_blocks_is_9_343

.L_last_num_blocks_is_7_1_343:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_343
        jb      .L_last_num_blocks_is_3_1_343

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_343
        je      .L_last_num_blocks_is_6_343
        jmp     .L_last_num_blocks_is_5_343

.L_last_num_blocks_is_3_1_343:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_343
        je      .L_last_num_blocks_is_2_343
.L_last_num_blocks_is_1_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_344
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_344

.L_16_blocks_overflow_344:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_344:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_345





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_345
.L_small_initial_partial_block_345:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_345
.L_small_initial_compute_done_345:
.L_after_reduction_345:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_2_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_346
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_346

.L_16_blocks_overflow_346:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_346:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_347





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_347
.L_small_initial_partial_block_347:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_347:

        orq     %r8,%r8
        je      .L_after_reduction_347
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_347:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_3_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_348
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_348

.L_16_blocks_overflow_348:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_348:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_349





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_349
.L_small_initial_partial_block_349:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_349:

        orq     %r8,%r8
        je      .L_after_reduction_349
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_349:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_4_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_350
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_350

.L_16_blocks_overflow_350:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_350:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_351





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_351
.L_small_initial_partial_block_351:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_351:

        orq     %r8,%r8
        je      .L_after_reduction_351
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_351:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_5_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_352
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_352

.L_16_blocks_overflow_352:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_352:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_353





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_353
.L_small_initial_partial_block_353:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_353:

        orq     %r8,%r8
        je      .L_after_reduction_353
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_353:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_6_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_354
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_354

.L_16_blocks_overflow_354:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_354:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_355





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_355
.L_small_initial_partial_block_355:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_355:

        orq     %r8,%r8
        je      .L_after_reduction_355
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_355:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_7_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_356
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_356

.L_16_blocks_overflow_356:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_356:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_357





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_357
.L_small_initial_partial_block_357:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_357:

        orq     %r8,%r8
        je      .L_after_reduction_357
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_357:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_8_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_358
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_358

.L_16_blocks_overflow_358:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_358:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_359





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_359
.L_small_initial_partial_block_359:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_359:

        orq     %r8,%r8
        je      .L_after_reduction_359
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_359:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_9_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_360
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_360

.L_16_blocks_overflow_360:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_360:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_361





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_361
.L_small_initial_partial_block_361:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_361:

        orq     %r8,%r8
        je      .L_after_reduction_361
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_361:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_10_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_362
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_362

.L_16_blocks_overflow_362:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_362:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_363





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_363
.L_small_initial_partial_block_363:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_363:

        orq     %r8,%r8
        je      .L_after_reduction_363
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_363:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_11_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_364
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_364

.L_16_blocks_overflow_364:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_364:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_365





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_365
.L_small_initial_partial_block_365:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_365:

        orq     %r8,%r8
        je      .L_after_reduction_365
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_365:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_12_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_366
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_366

.L_16_blocks_overflow_366:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_366:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_367





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_367
.L_small_initial_partial_block_367:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_367:

        orq     %r8,%r8
        je      .L_after_reduction_367
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_367:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_13_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_368
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_368

.L_16_blocks_overflow_368:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_368:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_369





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_369
.L_small_initial_partial_block_369:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_369:

        orq     %r8,%r8
        je      .L_after_reduction_369
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_369:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_14_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_370
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_370

.L_16_blocks_overflow_370:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_370:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_371





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_371
.L_small_initial_partial_block_371:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_371:

        orq     %r8,%r8
        je      .L_after_reduction_371
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_371:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_15_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_372
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_372

.L_16_blocks_overflow_372:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_372:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_373





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_373
.L_small_initial_partial_block_373:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_373:

        orq     %r8,%r8
        je      .L_after_reduction_373
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_373:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_16_343:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_374
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_374

.L_16_blocks_overflow_374:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_374:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_375:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_375:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_375:
        jmp     .L_last_blocks_done_343
.L_last_num_blocks_is_0_343:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_343:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_334
.L_encrypt_32_blocks_334:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_376
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_376
.L_16_blocks_overflow_376:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_376:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_377
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_377
.L_16_blocks_overflow_377:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_377:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_378

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_378
        jb      .L_last_num_blocks_is_7_1_378


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_378
        jb      .L_last_num_blocks_is_11_9_378


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_378
        ja      .L_last_num_blocks_is_16_378
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_378
        jmp     .L_last_num_blocks_is_13_378

.L_last_num_blocks_is_11_9_378:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_378
        ja      .L_last_num_blocks_is_11_378
        jmp     .L_last_num_blocks_is_9_378

.L_last_num_blocks_is_7_1_378:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_378
        jb      .L_last_num_blocks_is_3_1_378

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_378
        je      .L_last_num_blocks_is_6_378
        jmp     .L_last_num_blocks_is_5_378

.L_last_num_blocks_is_3_1_378:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_378
        je      .L_last_num_blocks_is_2_378
.L_last_num_blocks_is_1_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_379
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_379

.L_16_blocks_overflow_379:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_379:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_380





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_380
.L_small_initial_partial_block_380:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_380
.L_small_initial_compute_done_380:
.L_after_reduction_380:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_2_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_381
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_381

.L_16_blocks_overflow_381:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_381:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_382





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_382
.L_small_initial_partial_block_382:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_382:

        orq     %r8,%r8
        je      .L_after_reduction_382
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_382:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_3_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_383
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_383

.L_16_blocks_overflow_383:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_383:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_384





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_384
.L_small_initial_partial_block_384:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_384:

        orq     %r8,%r8
        je      .L_after_reduction_384
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_384:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_4_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_385
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_385

.L_16_blocks_overflow_385:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_385:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_386





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_386
.L_small_initial_partial_block_386:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_386:

        orq     %r8,%r8
        je      .L_after_reduction_386
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_386:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_5_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_387
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_387

.L_16_blocks_overflow_387:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_387:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_388





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_388
.L_small_initial_partial_block_388:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_388:

        orq     %r8,%r8
        je      .L_after_reduction_388
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_388:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_6_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_389
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_389

.L_16_blocks_overflow_389:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_389:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_390





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_390
.L_small_initial_partial_block_390:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_390:

        orq     %r8,%r8
        je      .L_after_reduction_390
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_390:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_7_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_391
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_391

.L_16_blocks_overflow_391:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_391:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_392





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_392
.L_small_initial_partial_block_392:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_392:

        orq     %r8,%r8
        je      .L_after_reduction_392
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_392:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_8_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_393
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_393

.L_16_blocks_overflow_393:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_393:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_394





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_394
.L_small_initial_partial_block_394:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_394:

        orq     %r8,%r8
        je      .L_after_reduction_394
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_394:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_9_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_395
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_395

.L_16_blocks_overflow_395:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_395:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_396





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_396
.L_small_initial_partial_block_396:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_396:

        orq     %r8,%r8
        je      .L_after_reduction_396
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_396:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_10_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_397
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_397

.L_16_blocks_overflow_397:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_397:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_398





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_398
.L_small_initial_partial_block_398:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_398:

        orq     %r8,%r8
        je      .L_after_reduction_398
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_398:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_11_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_399
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_399

.L_16_blocks_overflow_399:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_399:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_400





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_400
.L_small_initial_partial_block_400:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_400:

        orq     %r8,%r8
        je      .L_after_reduction_400
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_400:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_12_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_401
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_401

.L_16_blocks_overflow_401:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_401:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_402





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_402
.L_small_initial_partial_block_402:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_402:

        orq     %r8,%r8
        je      .L_after_reduction_402
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_402:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_13_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_403
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_403

.L_16_blocks_overflow_403:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_403:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_404





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_404
.L_small_initial_partial_block_404:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_404:

        orq     %r8,%r8
        je      .L_after_reduction_404
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_404:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_14_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_405
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_405

.L_16_blocks_overflow_405:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_405:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_406





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_406
.L_small_initial_partial_block_406:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_406:

        orq     %r8,%r8
        je      .L_after_reduction_406
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_406:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_15_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_407
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_407

.L_16_blocks_overflow_407:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_407:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_408





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_408
.L_small_initial_partial_block_408:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_408:

        orq     %r8,%r8
        je      .L_after_reduction_408
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_408:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_16_378:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_409
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_409

.L_16_blocks_overflow_409:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_409:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_410:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_410:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_410:
        jmp     .L_last_blocks_done_378
.L_last_num_blocks_is_0_378:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_378:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_334
.L_encrypt_16_blocks_334:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_411
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_411
.L_16_blocks_overflow_411:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_411:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_412

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_412
        jb      .L_last_num_blocks_is_7_1_412


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_412
        jb      .L_last_num_blocks_is_11_9_412


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_412
        ja      .L_last_num_blocks_is_16_412
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_412
        jmp     .L_last_num_blocks_is_13_412

.L_last_num_blocks_is_11_9_412:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_412
        ja      .L_last_num_blocks_is_11_412
        jmp     .L_last_num_blocks_is_9_412

.L_last_num_blocks_is_7_1_412:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_412
        jb      .L_last_num_blocks_is_3_1_412

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_412
        je      .L_last_num_blocks_is_6_412
        jmp     .L_last_num_blocks_is_5_412

.L_last_num_blocks_is_3_1_412:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_412
        je      .L_last_num_blocks_is_2_412
.L_last_num_blocks_is_1_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_413
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_413

.L_16_blocks_overflow_413:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_413:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_414





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_414
.L_small_initial_partial_block_414:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_414
.L_small_initial_compute_done_414:
.L_after_reduction_414:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_2_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_415
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_415

.L_16_blocks_overflow_415:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_415:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_416





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_416
.L_small_initial_partial_block_416:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_416:

        orq     %r8,%r8
        je      .L_after_reduction_416
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_416:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_3_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_417
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_417

.L_16_blocks_overflow_417:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_417:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_418





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_418
.L_small_initial_partial_block_418:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_418:

        orq     %r8,%r8
        je      .L_after_reduction_418
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_418:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_4_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_419
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_419

.L_16_blocks_overflow_419:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_419:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_420





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_420
.L_small_initial_partial_block_420:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_420:

        orq     %r8,%r8
        je      .L_after_reduction_420
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_420:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_5_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_421
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_421

.L_16_blocks_overflow_421:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_421:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_422





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_422
.L_small_initial_partial_block_422:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_422:

        orq     %r8,%r8
        je      .L_after_reduction_422
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_422:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_6_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_423
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_423

.L_16_blocks_overflow_423:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_423:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_424





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_424
.L_small_initial_partial_block_424:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_424:

        orq     %r8,%r8
        je      .L_after_reduction_424
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_424:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_7_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_425
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_425

.L_16_blocks_overflow_425:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_425:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_426





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_426
.L_small_initial_partial_block_426:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_426:

        orq     %r8,%r8
        je      .L_after_reduction_426
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_426:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_8_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_427
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_427

.L_16_blocks_overflow_427:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_427:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_428





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_428
.L_small_initial_partial_block_428:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_428:

        orq     %r8,%r8
        je      .L_after_reduction_428
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_428:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_9_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_429
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_429

.L_16_blocks_overflow_429:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_429:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_430





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_430
.L_small_initial_partial_block_430:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_430:

        orq     %r8,%r8
        je      .L_after_reduction_430
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_430:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_10_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_431
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_431

.L_16_blocks_overflow_431:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_431:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_432





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_432
.L_small_initial_partial_block_432:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_432:

        orq     %r8,%r8
        je      .L_after_reduction_432
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_432:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_11_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_433
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_433

.L_16_blocks_overflow_433:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_433:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_434





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_434
.L_small_initial_partial_block_434:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_434:

        orq     %r8,%r8
        je      .L_after_reduction_434
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_434:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_12_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_435
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_435

.L_16_blocks_overflow_435:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_435:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_436





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_436
.L_small_initial_partial_block_436:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_436:

        orq     %r8,%r8
        je      .L_after_reduction_436
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_436:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_13_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_437
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_437

.L_16_blocks_overflow_437:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_437:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_438





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_438
.L_small_initial_partial_block_438:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_438:

        orq     %r8,%r8
        je      .L_after_reduction_438
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_438:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_14_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_439
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_439

.L_16_blocks_overflow_439:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_439:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_440





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_440
.L_small_initial_partial_block_440:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_440:

        orq     %r8,%r8
        je      .L_after_reduction_440
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_440:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_15_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_441
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_441

.L_16_blocks_overflow_441:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_441:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_442





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_442
.L_small_initial_partial_block_442:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_442:

        orq     %r8,%r8
        je      .L_after_reduction_442
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_442:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_16_412:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_443
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_443

.L_16_blocks_overflow_443:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_443:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_444:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_444:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_444:
        jmp     .L_last_blocks_done_412
.L_last_num_blocks_is_0_412:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_412:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_334

.L_message_below_32_blocks_334:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_445
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_445:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_446

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_446
        jb      .L_last_num_blocks_is_7_1_446


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_446
        jb      .L_last_num_blocks_is_11_9_446


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_446
        ja      .L_last_num_blocks_is_16_446
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_446
        jmp     .L_last_num_blocks_is_13_446

.L_last_num_blocks_is_11_9_446:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_446
        ja      .L_last_num_blocks_is_11_446
        jmp     .L_last_num_blocks_is_9_446

.L_last_num_blocks_is_7_1_446:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_446
        jb      .L_last_num_blocks_is_3_1_446

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_446
        je      .L_last_num_blocks_is_6_446
        jmp     .L_last_num_blocks_is_5_446

.L_last_num_blocks_is_3_1_446:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_446
        je      .L_last_num_blocks_is_2_446
.L_last_num_blocks_is_1_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_447
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_447

.L_16_blocks_overflow_447:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_447:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_448





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_448
.L_small_initial_partial_block_448:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_448
.L_small_initial_compute_done_448:
.L_after_reduction_448:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_2_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_449
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_449

.L_16_blocks_overflow_449:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_449:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_450





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_450
.L_small_initial_partial_block_450:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_450:

        orq     %r8,%r8
        je      .L_after_reduction_450
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_450:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_3_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_451
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_451

.L_16_blocks_overflow_451:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_451:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_452





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_452
.L_small_initial_partial_block_452:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_452:

        orq     %r8,%r8
        je      .L_after_reduction_452
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_452:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_4_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_453
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_453

.L_16_blocks_overflow_453:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_453:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_454





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_454
.L_small_initial_partial_block_454:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_454:

        orq     %r8,%r8
        je      .L_after_reduction_454
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_454:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_5_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_455
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_455

.L_16_blocks_overflow_455:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_455:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %xmm29,%xmm3,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_456





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_456
.L_small_initial_partial_block_456:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_456:

        orq     %r8,%r8
        je      .L_after_reduction_456
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_456:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_6_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_457
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_457

.L_16_blocks_overflow_457:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_457:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %ymm29,%ymm3,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_458





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_458
.L_small_initial_partial_block_458:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_458:

        orq     %r8,%r8
        je      .L_after_reduction_458
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_458:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_7_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_459
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_459

.L_16_blocks_overflow_459:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_459:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_460





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_460
.L_small_initial_partial_block_460:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_460:

        orq     %r8,%r8
        je      .L_after_reduction_460
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_460:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_8_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_461
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_461

.L_16_blocks_overflow_461:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_461:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_462





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_462
.L_small_initial_partial_block_462:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_462:

        orq     %r8,%r8
        je      .L_after_reduction_462
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_462:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_9_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_463
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_463

.L_16_blocks_overflow_463:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_463:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %xmm29,%xmm4,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_464





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_464
.L_small_initial_partial_block_464:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_464:

        orq     %r8,%r8
        je      .L_after_reduction_464
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_464:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_10_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_465
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_465

.L_16_blocks_overflow_465:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_465:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %ymm29,%ymm4,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_466





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_466
.L_small_initial_partial_block_466:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_466:

        orq     %r8,%r8
        je      .L_after_reduction_466
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_466:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_11_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_467
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_467

.L_16_blocks_overflow_467:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_467:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_468





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_468
.L_small_initial_partial_block_468:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_468:

        orq     %r8,%r8
        je      .L_after_reduction_468
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_468:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_12_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_469
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_469

.L_16_blocks_overflow_469:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_469:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_470





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_470
.L_small_initial_partial_block_470:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_470:

        orq     %r8,%r8
        je      .L_after_reduction_470
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_470:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_13_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_471
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_471

.L_16_blocks_overflow_471:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_471:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %xmm29,%xmm5,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_472





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_472
.L_small_initial_partial_block_472:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_472:

        orq     %r8,%r8
        je      .L_after_reduction_472
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_472:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_14_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_473
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_473

.L_16_blocks_overflow_473:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_473:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %ymm29,%ymm5,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_474





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_474
.L_small_initial_partial_block_474:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_474:

        orq     %r8,%r8
        je      .L_after_reduction_474
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_474:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_15_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_475
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_475

.L_16_blocks_overflow_475:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_475:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_476





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_476
.L_small_initial_partial_block_476:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_476:

        orq     %r8,%r8
        je      .L_after_reduction_476
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_476:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_16_446:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_477
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_477

.L_16_blocks_overflow_477:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_477:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm17
        vpshufb %zmm29,%zmm3,%zmm19
        vpshufb %zmm29,%zmm4,%zmm20
        vpshufb %zmm29,%zmm5,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_478:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_478:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_478:
        jmp     .L_last_blocks_done_446
.L_last_num_blocks_is_0_446:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_446:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_334

.L_message_below_equal_16_blocks_334:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_479
        jl      .L_small_initial_num_blocks_is_7_1_479


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_479
        jl      .L_small_initial_num_blocks_is_11_9_479


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_479
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_479
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_479
        jmp     .L_small_initial_num_blocks_is_13_479

.L_small_initial_num_blocks_is_11_9_479:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_479
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_479
        jmp     .L_small_initial_num_blocks_is_9_479

.L_small_initial_num_blocks_is_7_1_479:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_479
        jl      .L_small_initial_num_blocks_is_3_1_479

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_479
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_479
        jmp     .L_small_initial_num_blocks_is_5_479

.L_small_initial_num_blocks_is_3_1_479:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_479
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_479





.L_small_initial_num_blocks_is_1_479:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm0,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_480





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_480
.L_small_initial_partial_block_480:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_480
.L_small_initial_compute_done_480:
.L_after_reduction_480:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_2_479:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm0,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_481





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_481
.L_small_initial_partial_block_481:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_481:

        orq     %r8,%r8
        je      .L_after_reduction_481
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_481:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_3_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_482





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_482
.L_small_initial_partial_block_482:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_482:

        orq     %r8,%r8
        je      .L_after_reduction_482
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_482:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_4_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_483





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_483
.L_small_initial_partial_block_483:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_483:

        orq     %r8,%r8
        je      .L_after_reduction_483
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_483:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_5_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %xmm29,%xmm3,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_484





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_484
.L_small_initial_partial_block_484:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_484:

        orq     %r8,%r8
        je      .L_after_reduction_484
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_484:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_6_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %ymm29,%ymm3,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_485





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_485
.L_small_initial_partial_block_485:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_485:

        orq     %r8,%r8
        je      .L_after_reduction_485
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_485:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_7_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_486





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_486
.L_small_initial_partial_block_486:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_486:

        orq     %r8,%r8
        je      .L_after_reduction_486
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_486:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_8_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_487





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_487
.L_small_initial_partial_block_487:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_487:

        orq     %r8,%r8
        je      .L_after_reduction_487
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_487:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_9_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %xmm29,%xmm4,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_488





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_488
.L_small_initial_partial_block_488:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_488:

        orq     %r8,%r8
        je      .L_after_reduction_488
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_488:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_10_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %ymm29,%ymm4,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_489





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_489
.L_small_initial_partial_block_489:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_489:

        orq     %r8,%r8
        je      .L_after_reduction_489
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_489:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_11_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_490





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_490
.L_small_initial_partial_block_490:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_490:

        orq     %r8,%r8
        je      .L_after_reduction_490
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_490:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_12_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_491





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_491
.L_small_initial_partial_block_491:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_491:

        orq     %r8,%r8
        je      .L_after_reduction_491
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_491:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_13_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %xmm29,%xmm5,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_492





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_492
.L_small_initial_partial_block_492:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_492:

        orq     %r8,%r8
        je      .L_after_reduction_492
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_492:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_14_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %ymm29,%ymm5,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_493





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_493
.L_small_initial_partial_block_493:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_493:

        orq     %r8,%r8
        je      .L_after_reduction_493
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_493:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_15_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_494





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_494
.L_small_initial_partial_block_494:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_494:

        orq     %r8,%r8
        je      .L_after_reduction_494
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_494:
        jmp     .L_small_initial_blocks_encrypted_479
.L_small_initial_num_blocks_is_16_479:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm0,%zmm6
        vpshufb %zmm29,%zmm3,%zmm7
        vpshufb %zmm29,%zmm4,%zmm10
        vpshufb %zmm29,%zmm5,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_495:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_495:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_495:
.L_small_initial_blocks_encrypted_479:
.L_ghash_done_334:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_334:
        jmp     .Lexit_gcm_encrypt
.Lexit_gcm_encrypt:
        cmpq    $256,%r8
        jbe     .Lskip_hkeys_cleanup_496
        vpxor   %xmm0,%xmm0,%xmm0
        vmovdqa64       %zmm0,0(%rsp)
        vmovdqa64       %zmm0,64(%rsp)
        vmovdqa64       %zmm0,128(%rsp)
        vmovdqa64       %zmm0,192(%rsp)
        vmovdqa64       %zmm0,256(%rsp)
        vmovdqa64       %zmm0,320(%rsp)
        vmovdqa64       %zmm0,384(%rsp)
        vmovdqa64       %zmm0,448(%rsp)
        vmovdqa64       %zmm0,512(%rsp)
        vmovdqa64       %zmm0,576(%rsp)
        vmovdqa64       %zmm0,640(%rsp)
        vmovdqa64       %zmm0,704(%rsp)
.Lskip_hkeys_cleanup_496:
        vzeroupper
        leaq    (%rbp),%rsp
.cfi_def_cfa_register   %rsp
        popq    %r15
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r15
        popq    %r14
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r14
        popq    %r13
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r13
        popq    %r12
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r12
        popq    %rbp
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbp
        popq    %rbx
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbx
        .byte   0xf3,0xc3
.Lencrypt_seh_end:
.cfi_endproc
.size   ossl_aes_gcm_encrypt_avx512, .-ossl_aes_gcm_encrypt_avx512
.globl  ossl_aes_gcm_decrypt_avx512
.type   ossl_aes_gcm_decrypt_avx512,@function
.align  32
ossl_aes_gcm_decrypt_avx512:
.cfi_startproc
.Ldecrypt_seh_begin:
.byte   243,15,30,250
        pushq   %rbx
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbx,-16
.Ldecrypt_seh_push_rbx:
        pushq   %rbp
.cfi_adjust_cfa_offset  8
.cfi_offset     %rbp,-24
.Ldecrypt_seh_push_rbp:
        pushq   %r12
.cfi_adjust_cfa_offset  8
.cfi_offset     %r12,-32
.Ldecrypt_seh_push_r12:
        pushq   %r13
.cfi_adjust_cfa_offset  8
.cfi_offset     %r13,-40
.Ldecrypt_seh_push_r13:
        pushq   %r14
.cfi_adjust_cfa_offset  8
.cfi_offset     %r14,-48
.Ldecrypt_seh_push_r14:
        pushq   %r15
.cfi_adjust_cfa_offset  8
.cfi_offset     %r15,-56
.Ldecrypt_seh_push_r15:










        leaq    0(%rsp),%rbp
.cfi_def_cfa_register   %rbp
.Ldecrypt_seh_setfp:

.Ldecrypt_seh_prolog_end:
        subq    $1588,%rsp
        andq    $(-64),%rsp


        movl    240(%rdi),%eax
        cmpl    $9,%eax
        je      .Laes_gcm_decrypt_128_avx512
        cmpl    $11,%eax
        je      .Laes_gcm_decrypt_192_avx512
        cmpl    $13,%eax
        je      .Laes_gcm_decrypt_256_avx512
        xorl    %eax,%eax
        jmp     .Lexit_gcm_decrypt
.align  32
.Laes_gcm_decrypt_128_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_497
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_498
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3

        vmovdqa64       %xmm0,%xmm6
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_498
        subq    %r13,%r12
.L_no_extra_mask_498:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpand   %xmm0,%xmm6,%xmm6
        vpshufb SHUF_MASK(%rip),%xmm6,%xmm6
        vpshufb %xmm5,%xmm6,%xmm6
        vpxorq  %xmm6,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_498

        vpclmulqdq      $0x11,%xmm4,%xmm14,%xmm7
        vpclmulqdq      $0x00,%xmm4,%xmm14,%xmm10
        vpclmulqdq      $0x01,%xmm4,%xmm14,%xmm11
        vpclmulqdq      $0x10,%xmm4,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm14,%xmm14

        vpsrldq $8,%xmm14,%xmm11
        vpslldq $8,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm7,%xmm7
        vpxorq  %xmm10,%xmm14,%xmm14



        vmovdqu64       POLY2(%rip),%xmm11

        vpclmulqdq      $0x01,%xmm14,%xmm11,%xmm10
        vpslldq $8,%xmm10,%xmm10
        vpxorq  %xmm10,%xmm14,%xmm14



        vpclmulqdq      $0x00,%xmm14,%xmm11,%xmm10
        vpsrldq $4,%xmm10,%xmm10
        vpclmulqdq      $0x10,%xmm14,%xmm11,%xmm14
        vpslldq $4,%xmm14,%xmm14

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_498

.L_partial_incomplete_498:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_498:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_498:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_497
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_497

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_499
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_499
.L_next_16_overflow_499:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_499:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_500

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_500:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_497



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_501
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_501
.L_next_16_overflow_501:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_501:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_502
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_502:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_497
.L_encrypt_big_nblocks_497:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_503
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_503
.L_16_blocks_overflow_503:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_503:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_504
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_504
.L_16_blocks_overflow_504:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_504:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_505
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_505
.L_16_blocks_overflow_505:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_505:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm6
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_497

.L_no_more_big_nblocks_497:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_497

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_497
.L_encrypt_0_blocks_ghash_32_497:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_506

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_506
        jb      .L_last_num_blocks_is_7_1_506


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_506
        jb      .L_last_num_blocks_is_11_9_506


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_506
        ja      .L_last_num_blocks_is_16_506
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_506
        jmp     .L_last_num_blocks_is_13_506

.L_last_num_blocks_is_11_9_506:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_506
        ja      .L_last_num_blocks_is_11_506
        jmp     .L_last_num_blocks_is_9_506

.L_last_num_blocks_is_7_1_506:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_506
        jb      .L_last_num_blocks_is_3_1_506

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_506
        je      .L_last_num_blocks_is_6_506
        jmp     .L_last_num_blocks_is_5_506

.L_last_num_blocks_is_3_1_506:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_506
        je      .L_last_num_blocks_is_2_506
.L_last_num_blocks_is_1_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_507
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_507

.L_16_blocks_overflow_507:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_507:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_508





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_508
.L_small_initial_partial_block_508:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_508
.L_small_initial_compute_done_508:
.L_after_reduction_508:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_2_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_509
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_509

.L_16_blocks_overflow_509:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_509:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_510





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_510
.L_small_initial_partial_block_510:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_510:

        orq     %r8,%r8
        je      .L_after_reduction_510
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_510:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_3_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_511
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_511

.L_16_blocks_overflow_511:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_511:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_512





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_512
.L_small_initial_partial_block_512:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_512:

        orq     %r8,%r8
        je      .L_after_reduction_512
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_512:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_4_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_513
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_513

.L_16_blocks_overflow_513:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_513:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_514





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_514
.L_small_initial_partial_block_514:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_514:

        orq     %r8,%r8
        je      .L_after_reduction_514
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_514:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_5_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_515
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_515

.L_16_blocks_overflow_515:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_515:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_516





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_516
.L_small_initial_partial_block_516:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_516:

        orq     %r8,%r8
        je      .L_after_reduction_516
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_516:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_6_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_517
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_517

.L_16_blocks_overflow_517:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_517:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_518





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_518
.L_small_initial_partial_block_518:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_518:

        orq     %r8,%r8
        je      .L_after_reduction_518
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_518:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_7_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_519
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_519

.L_16_blocks_overflow_519:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_519:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_520





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_520
.L_small_initial_partial_block_520:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_520:

        orq     %r8,%r8
        je      .L_after_reduction_520
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_520:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_8_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_521
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_521

.L_16_blocks_overflow_521:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_521:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_522





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_522
.L_small_initial_partial_block_522:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_522:

        orq     %r8,%r8
        je      .L_after_reduction_522
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_522:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_9_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_523
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_523

.L_16_blocks_overflow_523:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_523:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_524





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_524
.L_small_initial_partial_block_524:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_524:

        orq     %r8,%r8
        je      .L_after_reduction_524
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_524:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_10_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_525
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_525

.L_16_blocks_overflow_525:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_525:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_526





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_526
.L_small_initial_partial_block_526:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_526:

        orq     %r8,%r8
        je      .L_after_reduction_526
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_526:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_11_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_527
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_527

.L_16_blocks_overflow_527:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_527:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_528





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_528
.L_small_initial_partial_block_528:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_528:

        orq     %r8,%r8
        je      .L_after_reduction_528
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_528:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_12_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_529
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_529

.L_16_blocks_overflow_529:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_529:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_530





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_530
.L_small_initial_partial_block_530:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_530:

        orq     %r8,%r8
        je      .L_after_reduction_530
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_530:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_13_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_531
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_531

.L_16_blocks_overflow_531:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_531:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_532





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_532
.L_small_initial_partial_block_532:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_532:

        orq     %r8,%r8
        je      .L_after_reduction_532
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_532:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_14_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_533
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_533

.L_16_blocks_overflow_533:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_533:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_534





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_534
.L_small_initial_partial_block_534:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_534:

        orq     %r8,%r8
        je      .L_after_reduction_534
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_534:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_15_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_535
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_535

.L_16_blocks_overflow_535:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_535:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_536





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_536
.L_small_initial_partial_block_536:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_536:

        orq     %r8,%r8
        je      .L_after_reduction_536
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_536:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_16_506:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_537
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_537

.L_16_blocks_overflow_537:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_537:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_538:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_538:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_538:
        jmp     .L_last_blocks_done_506
.L_last_num_blocks_is_0_506:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_506:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_497
.L_encrypt_32_blocks_497:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_539
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_539
.L_16_blocks_overflow_539:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_539:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_540
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_540
.L_16_blocks_overflow_540:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_540:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_541

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_541
        jb      .L_last_num_blocks_is_7_1_541


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_541
        jb      .L_last_num_blocks_is_11_9_541


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_541
        ja      .L_last_num_blocks_is_16_541
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_541
        jmp     .L_last_num_blocks_is_13_541

.L_last_num_blocks_is_11_9_541:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_541
        ja      .L_last_num_blocks_is_11_541
        jmp     .L_last_num_blocks_is_9_541

.L_last_num_blocks_is_7_1_541:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_541
        jb      .L_last_num_blocks_is_3_1_541

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_541
        je      .L_last_num_blocks_is_6_541
        jmp     .L_last_num_blocks_is_5_541

.L_last_num_blocks_is_3_1_541:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_541
        je      .L_last_num_blocks_is_2_541
.L_last_num_blocks_is_1_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_542
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_542

.L_16_blocks_overflow_542:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_542:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_543





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_543
.L_small_initial_partial_block_543:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_543
.L_small_initial_compute_done_543:
.L_after_reduction_543:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_2_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_544
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_544

.L_16_blocks_overflow_544:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_544:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_545





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_545
.L_small_initial_partial_block_545:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_545:

        orq     %r8,%r8
        je      .L_after_reduction_545
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_545:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_3_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_546
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_546

.L_16_blocks_overflow_546:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_546:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_547





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_547
.L_small_initial_partial_block_547:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_547:

        orq     %r8,%r8
        je      .L_after_reduction_547
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_547:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_4_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_548
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_548

.L_16_blocks_overflow_548:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_548:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_549





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_549
.L_small_initial_partial_block_549:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_549:

        orq     %r8,%r8
        je      .L_after_reduction_549
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_549:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_5_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_550
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_550

.L_16_blocks_overflow_550:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_550:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_551





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_551
.L_small_initial_partial_block_551:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_551:

        orq     %r8,%r8
        je      .L_after_reduction_551
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_551:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_6_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_552
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_552

.L_16_blocks_overflow_552:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_552:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_553





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_553
.L_small_initial_partial_block_553:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_553:

        orq     %r8,%r8
        je      .L_after_reduction_553
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_553:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_7_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_554
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_554

.L_16_blocks_overflow_554:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_554:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_555





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_555
.L_small_initial_partial_block_555:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_555:

        orq     %r8,%r8
        je      .L_after_reduction_555
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_555:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_8_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_556
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_556

.L_16_blocks_overflow_556:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_556:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_557





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_557
.L_small_initial_partial_block_557:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_557:

        orq     %r8,%r8
        je      .L_after_reduction_557
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_557:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_9_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_558
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_558

.L_16_blocks_overflow_558:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_558:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_559





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_559
.L_small_initial_partial_block_559:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_559:

        orq     %r8,%r8
        je      .L_after_reduction_559
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_559:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_10_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_560
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_560

.L_16_blocks_overflow_560:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_560:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_561





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_561
.L_small_initial_partial_block_561:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_561:

        orq     %r8,%r8
        je      .L_after_reduction_561
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_561:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_11_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_562
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_562

.L_16_blocks_overflow_562:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_562:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_563





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_563
.L_small_initial_partial_block_563:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_563:

        orq     %r8,%r8
        je      .L_after_reduction_563
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_563:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_12_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_564
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_564

.L_16_blocks_overflow_564:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_564:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_565





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_565
.L_small_initial_partial_block_565:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_565:

        orq     %r8,%r8
        je      .L_after_reduction_565
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_565:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_13_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_566
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_566

.L_16_blocks_overflow_566:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_566:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_567





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_567
.L_small_initial_partial_block_567:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_567:

        orq     %r8,%r8
        je      .L_after_reduction_567
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_567:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_14_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_568
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_568

.L_16_blocks_overflow_568:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_568:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_569





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_569
.L_small_initial_partial_block_569:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_569:

        orq     %r8,%r8
        je      .L_after_reduction_569
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_569:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_15_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_570
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_570

.L_16_blocks_overflow_570:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_570:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_571





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_571
.L_small_initial_partial_block_571:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_571:

        orq     %r8,%r8
        je      .L_after_reduction_571
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_571:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_16_541:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_572
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_572

.L_16_blocks_overflow_572:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_572:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_573:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_573:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_573:
        jmp     .L_last_blocks_done_541
.L_last_num_blocks_is_0_541:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_541:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_497
.L_encrypt_16_blocks_497:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_574
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_574
.L_16_blocks_overflow_574:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_574:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_575

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_575
        jb      .L_last_num_blocks_is_7_1_575


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_575
        jb      .L_last_num_blocks_is_11_9_575


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_575
        ja      .L_last_num_blocks_is_16_575
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_575
        jmp     .L_last_num_blocks_is_13_575

.L_last_num_blocks_is_11_9_575:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_575
        ja      .L_last_num_blocks_is_11_575
        jmp     .L_last_num_blocks_is_9_575

.L_last_num_blocks_is_7_1_575:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_575
        jb      .L_last_num_blocks_is_3_1_575

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_575
        je      .L_last_num_blocks_is_6_575
        jmp     .L_last_num_blocks_is_5_575

.L_last_num_blocks_is_3_1_575:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_575
        je      .L_last_num_blocks_is_2_575
.L_last_num_blocks_is_1_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_576
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_576

.L_16_blocks_overflow_576:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_576:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_577





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_577
.L_small_initial_partial_block_577:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_577
.L_small_initial_compute_done_577:
.L_after_reduction_577:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_2_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_578
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_578

.L_16_blocks_overflow_578:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_578:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_579





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_579
.L_small_initial_partial_block_579:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_579:

        orq     %r8,%r8
        je      .L_after_reduction_579
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_579:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_3_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_580
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_580

.L_16_blocks_overflow_580:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_580:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_581





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_581
.L_small_initial_partial_block_581:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_581:

        orq     %r8,%r8
        je      .L_after_reduction_581
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_581:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_4_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_582
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_582

.L_16_blocks_overflow_582:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_582:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_583





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_583
.L_small_initial_partial_block_583:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_583:

        orq     %r8,%r8
        je      .L_after_reduction_583
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_583:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_5_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_584
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_584

.L_16_blocks_overflow_584:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_584:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_585





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_585
.L_small_initial_partial_block_585:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_585:

        orq     %r8,%r8
        je      .L_after_reduction_585
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_585:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_6_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_586
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_586

.L_16_blocks_overflow_586:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_586:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_587





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_587
.L_small_initial_partial_block_587:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_587:

        orq     %r8,%r8
        je      .L_after_reduction_587
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_587:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_7_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_588
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_588

.L_16_blocks_overflow_588:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_588:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_589





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_589
.L_small_initial_partial_block_589:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_589:

        orq     %r8,%r8
        je      .L_after_reduction_589
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_589:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_8_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_590
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_590

.L_16_blocks_overflow_590:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_590:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_591





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_591
.L_small_initial_partial_block_591:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_591:

        orq     %r8,%r8
        je      .L_after_reduction_591
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_591:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_9_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_592
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_592

.L_16_blocks_overflow_592:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_592:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_593





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_593
.L_small_initial_partial_block_593:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_593:

        orq     %r8,%r8
        je      .L_after_reduction_593
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_593:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_10_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_594
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_594

.L_16_blocks_overflow_594:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_594:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_595





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_595
.L_small_initial_partial_block_595:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_595:

        orq     %r8,%r8
        je      .L_after_reduction_595
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_595:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_11_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_596
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_596

.L_16_blocks_overflow_596:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_596:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_597





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_597
.L_small_initial_partial_block_597:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_597:

        orq     %r8,%r8
        je      .L_after_reduction_597
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_597:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_12_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_598
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_598

.L_16_blocks_overflow_598:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_598:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_599





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_599
.L_small_initial_partial_block_599:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_599:

        orq     %r8,%r8
        je      .L_after_reduction_599
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_599:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_13_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_600
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_600

.L_16_blocks_overflow_600:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_600:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_601





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_601
.L_small_initial_partial_block_601:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_601:

        orq     %r8,%r8
        je      .L_after_reduction_601
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_601:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_14_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_602
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_602

.L_16_blocks_overflow_602:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_602:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_603





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_603
.L_small_initial_partial_block_603:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_603:

        orq     %r8,%r8
        je      .L_after_reduction_603
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_603:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_15_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_604
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_604

.L_16_blocks_overflow_604:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_604:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_605





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_605
.L_small_initial_partial_block_605:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_605:

        orq     %r8,%r8
        je      .L_after_reduction_605
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_605:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_16_575:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_606
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_606

.L_16_blocks_overflow_606:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_606:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_607:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_607:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_607:
        jmp     .L_last_blocks_done_575
.L_last_num_blocks_is_0_575:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_575:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_497

.L_message_below_32_blocks_497:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_608
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_608:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_609

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_609
        jb      .L_last_num_blocks_is_7_1_609


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_609
        jb      .L_last_num_blocks_is_11_9_609


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_609
        ja      .L_last_num_blocks_is_16_609
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_609
        jmp     .L_last_num_blocks_is_13_609

.L_last_num_blocks_is_11_9_609:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_609
        ja      .L_last_num_blocks_is_11_609
        jmp     .L_last_num_blocks_is_9_609

.L_last_num_blocks_is_7_1_609:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_609
        jb      .L_last_num_blocks_is_3_1_609

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_609
        je      .L_last_num_blocks_is_6_609
        jmp     .L_last_num_blocks_is_5_609

.L_last_num_blocks_is_3_1_609:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_609
        je      .L_last_num_blocks_is_2_609
.L_last_num_blocks_is_1_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_610
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_610

.L_16_blocks_overflow_610:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_610:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_611





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_611
.L_small_initial_partial_block_611:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_611
.L_small_initial_compute_done_611:
.L_after_reduction_611:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_2_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_612
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_612

.L_16_blocks_overflow_612:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_612:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_613





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_613
.L_small_initial_partial_block_613:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_613:

        orq     %r8,%r8
        je      .L_after_reduction_613
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_613:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_3_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_614
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_614

.L_16_blocks_overflow_614:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_614:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_615





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_615
.L_small_initial_partial_block_615:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_615:

        orq     %r8,%r8
        je      .L_after_reduction_615
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_615:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_4_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_616
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_616

.L_16_blocks_overflow_616:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_616:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_617





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_617
.L_small_initial_partial_block_617:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_617:

        orq     %r8,%r8
        je      .L_after_reduction_617
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_617:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_5_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_618
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_618

.L_16_blocks_overflow_618:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_618:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_619





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_619
.L_small_initial_partial_block_619:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_619:

        orq     %r8,%r8
        je      .L_after_reduction_619
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_619:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_6_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_620
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_620

.L_16_blocks_overflow_620:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_620:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_621





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_621
.L_small_initial_partial_block_621:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_621:

        orq     %r8,%r8
        je      .L_after_reduction_621
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_621:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_7_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_622
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_622

.L_16_blocks_overflow_622:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_622:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_623





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_623
.L_small_initial_partial_block_623:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_623:

        orq     %r8,%r8
        je      .L_after_reduction_623
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_623:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_8_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_624
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_624

.L_16_blocks_overflow_624:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_624:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_625





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_625
.L_small_initial_partial_block_625:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_625:

        orq     %r8,%r8
        je      .L_after_reduction_625
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_625:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_9_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_626
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_626

.L_16_blocks_overflow_626:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_626:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_627





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_627
.L_small_initial_partial_block_627:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_627:

        orq     %r8,%r8
        je      .L_after_reduction_627
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_627:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_10_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_628
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_628

.L_16_blocks_overflow_628:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_628:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_629





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_629
.L_small_initial_partial_block_629:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_629:

        orq     %r8,%r8
        je      .L_after_reduction_629
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_629:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_11_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_630
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_630

.L_16_blocks_overflow_630:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_630:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_631





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_631
.L_small_initial_partial_block_631:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_631:

        orq     %r8,%r8
        je      .L_after_reduction_631
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_631:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_12_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_632
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_632

.L_16_blocks_overflow_632:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_632:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_633





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_633
.L_small_initial_partial_block_633:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_633:

        orq     %r8,%r8
        je      .L_after_reduction_633
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_633:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_13_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_634
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_634

.L_16_blocks_overflow_634:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_634:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_635





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_635
.L_small_initial_partial_block_635:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_635:

        orq     %r8,%r8
        je      .L_after_reduction_635
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_635:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_14_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_636
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_636

.L_16_blocks_overflow_636:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_636:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_637





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_637
.L_small_initial_partial_block_637:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_637:

        orq     %r8,%r8
        je      .L_after_reduction_637
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_637:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_15_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_638
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_638

.L_16_blocks_overflow_638:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_638:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_639





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_639
.L_small_initial_partial_block_639:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_639:

        orq     %r8,%r8
        je      .L_after_reduction_639
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_639:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_16_609:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_640
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_640

.L_16_blocks_overflow_640:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_640:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_641:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_641:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_641:
        jmp     .L_last_blocks_done_609
.L_last_num_blocks_is_0_609:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_609:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_497

.L_message_below_equal_16_blocks_497:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_642
        jl      .L_small_initial_num_blocks_is_7_1_642


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_642
        jl      .L_small_initial_num_blocks_is_11_9_642


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_642
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_642
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_642
        jmp     .L_small_initial_num_blocks_is_13_642

.L_small_initial_num_blocks_is_11_9_642:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_642
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_642
        jmp     .L_small_initial_num_blocks_is_9_642

.L_small_initial_num_blocks_is_7_1_642:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_642
        jl      .L_small_initial_num_blocks_is_3_1_642

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_642
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_642
        jmp     .L_small_initial_num_blocks_is_5_642

.L_small_initial_num_blocks_is_3_1_642:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_642
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_642





.L_small_initial_num_blocks_is_1_642:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm6,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_643





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_643
.L_small_initial_partial_block_643:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_643
.L_small_initial_compute_done_643:
.L_after_reduction_643:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_2_642:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm6,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_644





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_644
.L_small_initial_partial_block_644:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_644:

        orq     %r8,%r8
        je      .L_after_reduction_644
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_644:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_3_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_645





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_645
.L_small_initial_partial_block_645:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_645:

        orq     %r8,%r8
        je      .L_after_reduction_645
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_645:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_4_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_646





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_646
.L_small_initial_partial_block_646:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_646:

        orq     %r8,%r8
        je      .L_after_reduction_646
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_646:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_5_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %xmm29,%xmm7,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_647





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_647
.L_small_initial_partial_block_647:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_647:

        orq     %r8,%r8
        je      .L_after_reduction_647
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_647:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_6_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %ymm29,%ymm7,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_648





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_648
.L_small_initial_partial_block_648:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_648:

        orq     %r8,%r8
        je      .L_after_reduction_648
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_648:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_7_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_649





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_649
.L_small_initial_partial_block_649:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_649:

        orq     %r8,%r8
        je      .L_after_reduction_649
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_649:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_8_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_650





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_650
.L_small_initial_partial_block_650:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_650:

        orq     %r8,%r8
        je      .L_after_reduction_650
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_650:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_9_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %xmm29,%xmm10,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_651





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_651
.L_small_initial_partial_block_651:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_651:

        orq     %r8,%r8
        je      .L_after_reduction_651
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_651:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_10_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %ymm29,%ymm10,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_652





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_652
.L_small_initial_partial_block_652:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_652:

        orq     %r8,%r8
        je      .L_after_reduction_652
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_652:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_11_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_653





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_653
.L_small_initial_partial_block_653:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_653:

        orq     %r8,%r8
        je      .L_after_reduction_653
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_653:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_12_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_654





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_654
.L_small_initial_partial_block_654:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_654:

        orq     %r8,%r8
        je      .L_after_reduction_654
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_654:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_13_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %xmm29,%xmm11,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_655





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_655
.L_small_initial_partial_block_655:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_655:

        orq     %r8,%r8
        je      .L_after_reduction_655
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_655:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_14_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %ymm29,%ymm11,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_656





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_656
.L_small_initial_partial_block_656:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_656:

        orq     %r8,%r8
        je      .L_after_reduction_656
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_656:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_15_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_657





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_657
.L_small_initial_partial_block_657:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_657:

        orq     %r8,%r8
        je      .L_after_reduction_657
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_657:
        jmp     .L_small_initial_blocks_encrypted_642
.L_small_initial_num_blocks_is_16_642:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_658:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_658:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_658:
.L_small_initial_blocks_encrypted_642:
.L_ghash_done_497:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_497:
        jmp     .Lexit_gcm_decrypt
.align  32
.Laes_gcm_decrypt_192_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_659
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_660
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3

        vmovdqa64       %xmm0,%xmm6
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_660
        subq    %r13,%r12
.L_no_extra_mask_660:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpand   %xmm0,%xmm6,%xmm6
        vpshufb SHUF_MASK(%rip),%xmm6,%xmm6
        vpshufb %xmm5,%xmm6,%xmm6
        vpxorq  %xmm6,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_660

        vpclmulqdq      $0x11,%xmm4,%xmm14,%xmm7
        vpclmulqdq      $0x00,%xmm4,%xmm14,%xmm10
        vpclmulqdq      $0x01,%xmm4,%xmm14,%xmm11
        vpclmulqdq      $0x10,%xmm4,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm14,%xmm14

        vpsrldq $8,%xmm14,%xmm11
        vpslldq $8,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm7,%xmm7
        vpxorq  %xmm10,%xmm14,%xmm14



        vmovdqu64       POLY2(%rip),%xmm11

        vpclmulqdq      $0x01,%xmm14,%xmm11,%xmm10
        vpslldq $8,%xmm10,%xmm10
        vpxorq  %xmm10,%xmm14,%xmm14



        vpclmulqdq      $0x00,%xmm14,%xmm11,%xmm10
        vpsrldq $4,%xmm10,%xmm10
        vpclmulqdq      $0x10,%xmm14,%xmm11,%xmm14
        vpslldq $4,%xmm14,%xmm14

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_660

.L_partial_incomplete_660:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_660:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_660:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_659
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_659

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_661
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_661
.L_next_16_overflow_661:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_661:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_662

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_662:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_659



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_663
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_663
.L_next_16_overflow_663:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_663:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_664
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_664:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_659
.L_encrypt_big_nblocks_659:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_665
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_665
.L_16_blocks_overflow_665:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_665:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_666
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_666
.L_16_blocks_overflow_666:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_666:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_667
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_667
.L_16_blocks_overflow_667:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_667:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm6
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_659

.L_no_more_big_nblocks_659:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_659

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_659
.L_encrypt_0_blocks_ghash_32_659:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_668

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_668
        jb      .L_last_num_blocks_is_7_1_668


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_668
        jb      .L_last_num_blocks_is_11_9_668


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_668
        ja      .L_last_num_blocks_is_16_668
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_668
        jmp     .L_last_num_blocks_is_13_668

.L_last_num_blocks_is_11_9_668:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_668
        ja      .L_last_num_blocks_is_11_668
        jmp     .L_last_num_blocks_is_9_668

.L_last_num_blocks_is_7_1_668:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_668
        jb      .L_last_num_blocks_is_3_1_668

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_668
        je      .L_last_num_blocks_is_6_668
        jmp     .L_last_num_blocks_is_5_668

.L_last_num_blocks_is_3_1_668:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_668
        je      .L_last_num_blocks_is_2_668
.L_last_num_blocks_is_1_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_669
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_669

.L_16_blocks_overflow_669:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_669:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_670





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_670
.L_small_initial_partial_block_670:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_670
.L_small_initial_compute_done_670:
.L_after_reduction_670:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_2_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_671
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_671

.L_16_blocks_overflow_671:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_671:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_672





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_672
.L_small_initial_partial_block_672:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_672:

        orq     %r8,%r8
        je      .L_after_reduction_672
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_672:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_3_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_673
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_673

.L_16_blocks_overflow_673:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_673:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_674





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_674
.L_small_initial_partial_block_674:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_674:

        orq     %r8,%r8
        je      .L_after_reduction_674
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_674:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_4_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_675
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_675

.L_16_blocks_overflow_675:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_675:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_676





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_676
.L_small_initial_partial_block_676:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_676:

        orq     %r8,%r8
        je      .L_after_reduction_676
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_676:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_5_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_677
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_677

.L_16_blocks_overflow_677:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_677:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_678





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_678
.L_small_initial_partial_block_678:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_678:

        orq     %r8,%r8
        je      .L_after_reduction_678
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_678:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_6_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_679
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_679

.L_16_blocks_overflow_679:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_679:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_680





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_680
.L_small_initial_partial_block_680:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_680:

        orq     %r8,%r8
        je      .L_after_reduction_680
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_680:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_7_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_681
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_681

.L_16_blocks_overflow_681:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_681:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_682





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_682
.L_small_initial_partial_block_682:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_682:

        orq     %r8,%r8
        je      .L_after_reduction_682
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_682:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_8_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_683
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_683

.L_16_blocks_overflow_683:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_683:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_684





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_684
.L_small_initial_partial_block_684:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_684:

        orq     %r8,%r8
        je      .L_after_reduction_684
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_684:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_9_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_685
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_685

.L_16_blocks_overflow_685:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_685:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_686





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_686
.L_small_initial_partial_block_686:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_686:

        orq     %r8,%r8
        je      .L_after_reduction_686
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_686:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_10_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_687
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_687

.L_16_blocks_overflow_687:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_687:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_688





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_688
.L_small_initial_partial_block_688:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_688:

        orq     %r8,%r8
        je      .L_after_reduction_688
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_688:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_11_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_689
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_689

.L_16_blocks_overflow_689:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_689:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_690





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_690
.L_small_initial_partial_block_690:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_690:

        orq     %r8,%r8
        je      .L_after_reduction_690
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_690:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_12_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_691
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_691

.L_16_blocks_overflow_691:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_691:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_692





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_692
.L_small_initial_partial_block_692:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_692:

        orq     %r8,%r8
        je      .L_after_reduction_692
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_692:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_13_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_693
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_693

.L_16_blocks_overflow_693:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_693:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_694





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_694
.L_small_initial_partial_block_694:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_694:

        orq     %r8,%r8
        je      .L_after_reduction_694
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_694:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_14_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_695
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_695

.L_16_blocks_overflow_695:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_695:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_696





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_696
.L_small_initial_partial_block_696:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_696:

        orq     %r8,%r8
        je      .L_after_reduction_696
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_696:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_15_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_697
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_697

.L_16_blocks_overflow_697:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_697:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_698





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_698
.L_small_initial_partial_block_698:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_698:

        orq     %r8,%r8
        je      .L_after_reduction_698
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_698:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_16_668:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_699
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_699

.L_16_blocks_overflow_699:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_699:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_700:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_700:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_700:
        jmp     .L_last_blocks_done_668
.L_last_num_blocks_is_0_668:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_668:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_659
.L_encrypt_32_blocks_659:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_701
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_701
.L_16_blocks_overflow_701:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_701:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_702
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_702
.L_16_blocks_overflow_702:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_702:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_703

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_703
        jb      .L_last_num_blocks_is_7_1_703


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_703
        jb      .L_last_num_blocks_is_11_9_703


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_703
        ja      .L_last_num_blocks_is_16_703
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_703
        jmp     .L_last_num_blocks_is_13_703

.L_last_num_blocks_is_11_9_703:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_703
        ja      .L_last_num_blocks_is_11_703
        jmp     .L_last_num_blocks_is_9_703

.L_last_num_blocks_is_7_1_703:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_703
        jb      .L_last_num_blocks_is_3_1_703

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_703
        je      .L_last_num_blocks_is_6_703
        jmp     .L_last_num_blocks_is_5_703

.L_last_num_blocks_is_3_1_703:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_703
        je      .L_last_num_blocks_is_2_703
.L_last_num_blocks_is_1_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_704
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_704

.L_16_blocks_overflow_704:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_704:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_705





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_705
.L_small_initial_partial_block_705:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_705
.L_small_initial_compute_done_705:
.L_after_reduction_705:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_2_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_706
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_706

.L_16_blocks_overflow_706:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_706:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_707





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_707
.L_small_initial_partial_block_707:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_707:

        orq     %r8,%r8
        je      .L_after_reduction_707
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_707:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_3_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_708
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_708

.L_16_blocks_overflow_708:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_708:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_709





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_709
.L_small_initial_partial_block_709:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_709:

        orq     %r8,%r8
        je      .L_after_reduction_709
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_709:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_4_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_710
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_710

.L_16_blocks_overflow_710:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_710:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_711





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_711
.L_small_initial_partial_block_711:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_711:

        orq     %r8,%r8
        je      .L_after_reduction_711
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_711:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_5_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_712
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_712

.L_16_blocks_overflow_712:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_712:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_713





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_713
.L_small_initial_partial_block_713:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_713:

        orq     %r8,%r8
        je      .L_after_reduction_713
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_713:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_6_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_714
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_714

.L_16_blocks_overflow_714:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_714:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_715





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_715
.L_small_initial_partial_block_715:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_715:

        orq     %r8,%r8
        je      .L_after_reduction_715
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_715:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_7_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_716
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_716

.L_16_blocks_overflow_716:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_716:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_717





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_717
.L_small_initial_partial_block_717:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_717:

        orq     %r8,%r8
        je      .L_after_reduction_717
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_717:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_8_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_718
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_718

.L_16_blocks_overflow_718:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_718:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_719





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_719
.L_small_initial_partial_block_719:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_719:

        orq     %r8,%r8
        je      .L_after_reduction_719
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_719:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_9_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_720
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_720

.L_16_blocks_overflow_720:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_720:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_721





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_721
.L_small_initial_partial_block_721:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_721:

        orq     %r8,%r8
        je      .L_after_reduction_721
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_721:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_10_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_722
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_722

.L_16_blocks_overflow_722:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_722:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_723





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_723
.L_small_initial_partial_block_723:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_723:

        orq     %r8,%r8
        je      .L_after_reduction_723
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_723:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_11_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_724
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_724

.L_16_blocks_overflow_724:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_724:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_725





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_725
.L_small_initial_partial_block_725:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_725:

        orq     %r8,%r8
        je      .L_after_reduction_725
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_725:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_12_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_726
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_726

.L_16_blocks_overflow_726:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_726:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_727





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_727
.L_small_initial_partial_block_727:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_727:

        orq     %r8,%r8
        je      .L_after_reduction_727
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_727:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_13_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_728
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_728

.L_16_blocks_overflow_728:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_728:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_729





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_729
.L_small_initial_partial_block_729:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_729:

        orq     %r8,%r8
        je      .L_after_reduction_729
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_729:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_14_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_730
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_730

.L_16_blocks_overflow_730:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_730:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_731





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_731
.L_small_initial_partial_block_731:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_731:

        orq     %r8,%r8
        je      .L_after_reduction_731
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_731:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_15_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_732
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_732

.L_16_blocks_overflow_732:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_732:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_733





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_733
.L_small_initial_partial_block_733:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_733:

        orq     %r8,%r8
        je      .L_after_reduction_733
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_733:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_16_703:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_734
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_734

.L_16_blocks_overflow_734:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_734:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_735:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_735:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_735:
        jmp     .L_last_blocks_done_703
.L_last_num_blocks_is_0_703:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_703:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_659
.L_encrypt_16_blocks_659:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_736
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_736
.L_16_blocks_overflow_736:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_736:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_737

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_737
        jb      .L_last_num_blocks_is_7_1_737


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_737
        jb      .L_last_num_blocks_is_11_9_737


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_737
        ja      .L_last_num_blocks_is_16_737
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_737
        jmp     .L_last_num_blocks_is_13_737

.L_last_num_blocks_is_11_9_737:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_737
        ja      .L_last_num_blocks_is_11_737
        jmp     .L_last_num_blocks_is_9_737

.L_last_num_blocks_is_7_1_737:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_737
        jb      .L_last_num_blocks_is_3_1_737

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_737
        je      .L_last_num_blocks_is_6_737
        jmp     .L_last_num_blocks_is_5_737

.L_last_num_blocks_is_3_1_737:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_737
        je      .L_last_num_blocks_is_2_737
.L_last_num_blocks_is_1_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_738
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_738

.L_16_blocks_overflow_738:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_738:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_739





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_739
.L_small_initial_partial_block_739:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_739
.L_small_initial_compute_done_739:
.L_after_reduction_739:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_2_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_740
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_740

.L_16_blocks_overflow_740:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_740:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_741





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_741
.L_small_initial_partial_block_741:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_741:

        orq     %r8,%r8
        je      .L_after_reduction_741
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_741:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_3_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_742
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_742

.L_16_blocks_overflow_742:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_742:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_743





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_743
.L_small_initial_partial_block_743:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_743:

        orq     %r8,%r8
        je      .L_after_reduction_743
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_743:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_4_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_744
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_744

.L_16_blocks_overflow_744:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_744:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_745





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_745
.L_small_initial_partial_block_745:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_745:

        orq     %r8,%r8
        je      .L_after_reduction_745
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_745:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_5_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_746
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_746

.L_16_blocks_overflow_746:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_746:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_747





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_747
.L_small_initial_partial_block_747:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_747:

        orq     %r8,%r8
        je      .L_after_reduction_747
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_747:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_6_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_748
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_748

.L_16_blocks_overflow_748:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_748:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_749





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_749
.L_small_initial_partial_block_749:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_749:

        orq     %r8,%r8
        je      .L_after_reduction_749
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_749:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_7_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_750
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_750

.L_16_blocks_overflow_750:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_750:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_751





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_751
.L_small_initial_partial_block_751:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_751:

        orq     %r8,%r8
        je      .L_after_reduction_751
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_751:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_8_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_752
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_752

.L_16_blocks_overflow_752:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_752:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_753





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_753
.L_small_initial_partial_block_753:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_753:

        orq     %r8,%r8
        je      .L_after_reduction_753
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_753:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_9_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_754
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_754

.L_16_blocks_overflow_754:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_754:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_755





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_755
.L_small_initial_partial_block_755:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_755:

        orq     %r8,%r8
        je      .L_after_reduction_755
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_755:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_10_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_756
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_756

.L_16_blocks_overflow_756:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_756:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_757





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_757
.L_small_initial_partial_block_757:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_757:

        orq     %r8,%r8
        je      .L_after_reduction_757
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_757:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_11_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_758
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_758

.L_16_blocks_overflow_758:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_758:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_759





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_759
.L_small_initial_partial_block_759:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_759:

        orq     %r8,%r8
        je      .L_after_reduction_759
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_759:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_12_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_760
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_760

.L_16_blocks_overflow_760:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_760:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_761





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_761
.L_small_initial_partial_block_761:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_761:

        orq     %r8,%r8
        je      .L_after_reduction_761
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_761:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_13_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_762
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_762

.L_16_blocks_overflow_762:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_762:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_763





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_763
.L_small_initial_partial_block_763:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_763:

        orq     %r8,%r8
        je      .L_after_reduction_763
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_763:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_14_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_764
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_764

.L_16_blocks_overflow_764:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_764:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_765





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_765
.L_small_initial_partial_block_765:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_765:

        orq     %r8,%r8
        je      .L_after_reduction_765
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_765:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_15_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_766
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_766

.L_16_blocks_overflow_766:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_766:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_767





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_767
.L_small_initial_partial_block_767:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_767:

        orq     %r8,%r8
        je      .L_after_reduction_767
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_767:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_16_737:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_768
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_768

.L_16_blocks_overflow_768:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_768:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_769:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_769:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_769:
        jmp     .L_last_blocks_done_737
.L_last_num_blocks_is_0_737:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_737:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_659

.L_message_below_32_blocks_659:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_770
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_770:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_771

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_771
        jb      .L_last_num_blocks_is_7_1_771


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_771
        jb      .L_last_num_blocks_is_11_9_771


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_771
        ja      .L_last_num_blocks_is_16_771
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_771
        jmp     .L_last_num_blocks_is_13_771

.L_last_num_blocks_is_11_9_771:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_771
        ja      .L_last_num_blocks_is_11_771
        jmp     .L_last_num_blocks_is_9_771

.L_last_num_blocks_is_7_1_771:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_771
        jb      .L_last_num_blocks_is_3_1_771

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_771
        je      .L_last_num_blocks_is_6_771
        jmp     .L_last_num_blocks_is_5_771

.L_last_num_blocks_is_3_1_771:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_771
        je      .L_last_num_blocks_is_2_771
.L_last_num_blocks_is_1_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_772
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_772

.L_16_blocks_overflow_772:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_772:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_773





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_773
.L_small_initial_partial_block_773:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_773
.L_small_initial_compute_done_773:
.L_after_reduction_773:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_2_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_774
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_774

.L_16_blocks_overflow_774:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_774:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_775





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_775
.L_small_initial_partial_block_775:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_775:

        orq     %r8,%r8
        je      .L_after_reduction_775
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_775:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_3_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_776
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_776

.L_16_blocks_overflow_776:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_776:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_777





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_777
.L_small_initial_partial_block_777:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_777:

        orq     %r8,%r8
        je      .L_after_reduction_777
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_777:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_4_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_778
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_778

.L_16_blocks_overflow_778:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_778:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_779





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_779
.L_small_initial_partial_block_779:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_779:

        orq     %r8,%r8
        je      .L_after_reduction_779
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_779:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_5_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_780
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_780

.L_16_blocks_overflow_780:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_780:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_781





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_781
.L_small_initial_partial_block_781:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_781:

        orq     %r8,%r8
        je      .L_after_reduction_781
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_781:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_6_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_782
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_782

.L_16_blocks_overflow_782:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_782:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_783





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_783
.L_small_initial_partial_block_783:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_783:

        orq     %r8,%r8
        je      .L_after_reduction_783
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_783:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_7_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_784
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_784

.L_16_blocks_overflow_784:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_784:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_785





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_785
.L_small_initial_partial_block_785:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_785:

        orq     %r8,%r8
        je      .L_after_reduction_785
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_785:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_8_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_786
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_786

.L_16_blocks_overflow_786:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_786:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_787





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_787
.L_small_initial_partial_block_787:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_787:

        orq     %r8,%r8
        je      .L_after_reduction_787
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_787:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_9_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_788
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_788

.L_16_blocks_overflow_788:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_788:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_789





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_789
.L_small_initial_partial_block_789:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_789:

        orq     %r8,%r8
        je      .L_after_reduction_789
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_789:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_10_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_790
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_790

.L_16_blocks_overflow_790:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_790:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_791





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_791
.L_small_initial_partial_block_791:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_791:

        orq     %r8,%r8
        je      .L_after_reduction_791
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_791:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_11_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_792
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_792

.L_16_blocks_overflow_792:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_792:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_793





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_793
.L_small_initial_partial_block_793:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_793:

        orq     %r8,%r8
        je      .L_after_reduction_793
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_793:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_12_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_794
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_794

.L_16_blocks_overflow_794:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_794:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_795





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_795
.L_small_initial_partial_block_795:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_795:

        orq     %r8,%r8
        je      .L_after_reduction_795
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_795:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_13_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_796
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_796

.L_16_blocks_overflow_796:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_796:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_797





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_797
.L_small_initial_partial_block_797:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_797:

        orq     %r8,%r8
        je      .L_after_reduction_797
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_797:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_14_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_798
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_798

.L_16_blocks_overflow_798:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_798:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_799





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_799
.L_small_initial_partial_block_799:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_799:

        orq     %r8,%r8
        je      .L_after_reduction_799
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_799:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_15_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_800
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_800

.L_16_blocks_overflow_800:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_800:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_801





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_801
.L_small_initial_partial_block_801:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_801:

        orq     %r8,%r8
        je      .L_after_reduction_801
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_801:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_16_771:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_802
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_802

.L_16_blocks_overflow_802:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_802:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_803:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_803:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_803:
        jmp     .L_last_blocks_done_771
.L_last_num_blocks_is_0_771:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_771:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_659

.L_message_below_equal_16_blocks_659:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_804
        jl      .L_small_initial_num_blocks_is_7_1_804


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_804
        jl      .L_small_initial_num_blocks_is_11_9_804


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_804
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_804
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_804
        jmp     .L_small_initial_num_blocks_is_13_804

.L_small_initial_num_blocks_is_11_9_804:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_804
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_804
        jmp     .L_small_initial_num_blocks_is_9_804

.L_small_initial_num_blocks_is_7_1_804:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_804
        jl      .L_small_initial_num_blocks_is_3_1_804

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_804
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_804
        jmp     .L_small_initial_num_blocks_is_5_804

.L_small_initial_num_blocks_is_3_1_804:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_804
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_804





.L_small_initial_num_blocks_is_1_804:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm6,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_805





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_805
.L_small_initial_partial_block_805:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_805
.L_small_initial_compute_done_805:
.L_after_reduction_805:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_2_804:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm6,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_806





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_806
.L_small_initial_partial_block_806:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_806:

        orq     %r8,%r8
        je      .L_after_reduction_806
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_806:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_3_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_807





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_807
.L_small_initial_partial_block_807:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_807:

        orq     %r8,%r8
        je      .L_after_reduction_807
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_807:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_4_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_808





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_808
.L_small_initial_partial_block_808:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_808:

        orq     %r8,%r8
        je      .L_after_reduction_808
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_808:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_5_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %xmm29,%xmm7,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_809





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_809
.L_small_initial_partial_block_809:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_809:

        orq     %r8,%r8
        je      .L_after_reduction_809
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_809:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_6_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %ymm29,%ymm7,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_810





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_810
.L_small_initial_partial_block_810:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_810:

        orq     %r8,%r8
        je      .L_after_reduction_810
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_810:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_7_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_811





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_811
.L_small_initial_partial_block_811:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_811:

        orq     %r8,%r8
        je      .L_after_reduction_811
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_811:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_8_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_812





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_812
.L_small_initial_partial_block_812:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_812:

        orq     %r8,%r8
        je      .L_after_reduction_812
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_812:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_9_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %xmm29,%xmm10,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_813





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_813
.L_small_initial_partial_block_813:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_813:

        orq     %r8,%r8
        je      .L_after_reduction_813
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_813:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_10_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %ymm29,%ymm10,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_814





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_814
.L_small_initial_partial_block_814:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_814:

        orq     %r8,%r8
        je      .L_after_reduction_814
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_814:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_11_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_815





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_815
.L_small_initial_partial_block_815:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_815:

        orq     %r8,%r8
        je      .L_after_reduction_815
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_815:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_12_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_816





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_816
.L_small_initial_partial_block_816:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_816:

        orq     %r8,%r8
        je      .L_after_reduction_816
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_816:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_13_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %xmm29,%xmm11,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_817





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_817
.L_small_initial_partial_block_817:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_817:

        orq     %r8,%r8
        je      .L_after_reduction_817
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_817:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_14_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %ymm29,%ymm11,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_818





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_818
.L_small_initial_partial_block_818:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_818:

        orq     %r8,%r8
        je      .L_after_reduction_818
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_818:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_15_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_819





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_819
.L_small_initial_partial_block_819:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_819:

        orq     %r8,%r8
        je      .L_after_reduction_819
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_819:
        jmp     .L_small_initial_blocks_encrypted_804
.L_small_initial_num_blocks_is_16_804:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_820:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_820:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_820:
.L_small_initial_blocks_encrypted_804:
.L_ghash_done_659:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_659:
        jmp     .Lexit_gcm_decrypt
.align  32
.Laes_gcm_decrypt_256_avx512:
        orq     %r8,%r8
        je      .L_enc_dec_done_821
        xorq    %r14,%r14
        vmovdqu64       64(%rsi),%xmm14

        movq    (%rdx),%r11
        orq     %r11,%r11
        je      .L_partial_block_done_822
        movl    $16,%r10d
        leaq    byte_len_to_mask_table(%rip),%r12
        cmpq    %r10,%r8
        cmovcq  %r8,%r10
        kmovw   (%r12,%r10,2),%k1
        vmovdqu8        (%rcx),%xmm0{%k1}{z}

        vmovdqu64       16(%rsi),%xmm3
        vmovdqu64       336(%rsi),%xmm4



        leaq    SHIFT_MASK(%rip),%r12
        addq    %r11,%r12
        vmovdqu64       (%r12),%xmm5
        vpshufb %xmm5,%xmm3,%xmm3

        vmovdqa64       %xmm0,%xmm6
        vpxorq  %xmm0,%xmm3,%xmm3


        leaq    (%r8,%r11,1),%r13
        subq    $16,%r13
        jge     .L_no_extra_mask_822
        subq    %r13,%r12
.L_no_extra_mask_822:



        vmovdqu64       16(%r12),%xmm0
        vpand   %xmm0,%xmm3,%xmm3
        vpand   %xmm0,%xmm6,%xmm6
        vpshufb SHUF_MASK(%rip),%xmm6,%xmm6
        vpshufb %xmm5,%xmm6,%xmm6
        vpxorq  %xmm6,%xmm14,%xmm14
        cmpq    $0,%r13
        jl      .L_partial_incomplete_822

        vpclmulqdq      $0x11,%xmm4,%xmm14,%xmm7
        vpclmulqdq      $0x00,%xmm4,%xmm14,%xmm10
        vpclmulqdq      $0x01,%xmm4,%xmm14,%xmm11
        vpclmulqdq      $0x10,%xmm4,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm14,%xmm14

        vpsrldq $8,%xmm14,%xmm11
        vpslldq $8,%xmm14,%xmm14
        vpxorq  %xmm11,%xmm7,%xmm7
        vpxorq  %xmm10,%xmm14,%xmm14



        vmovdqu64       POLY2(%rip),%xmm11

        vpclmulqdq      $0x01,%xmm14,%xmm11,%xmm10
        vpslldq $8,%xmm10,%xmm10
        vpxorq  %xmm10,%xmm14,%xmm14



        vpclmulqdq      $0x00,%xmm14,%xmm11,%xmm10
        vpsrldq $4,%xmm10,%xmm10
        vpclmulqdq      $0x10,%xmm14,%xmm11,%xmm14
        vpslldq $4,%xmm14,%xmm14

        vpternlogq      $0x96,%xmm10,%xmm7,%xmm14

        movq    $0,(%rdx)

        movq    %r11,%r12
        movq    $16,%r11
        subq    %r12,%r11
        jmp     .L_enc_dec_done_822

.L_partial_incomplete_822:
        addq    %r8,(%rdx)
        movq    %r8,%r11

.L_enc_dec_done_822:


        leaq    byte_len_to_mask_table(%rip),%r12
        kmovw   (%r12,%r11,2),%k1
        vmovdqu64       %xmm14,64(%rsi)
        movq    %r9,%r12
        vmovdqu8        %xmm3,(%r12){%k1}
.L_partial_block_done_822:
        vmovdqu64       0(%rsi),%xmm2
        subq    %r11,%r8
        je      .L_enc_dec_done_821
        cmpq    $256,%r8
        jbe     .L_message_below_equal_16_blocks_821

        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vmovdqa64       ddq_addbe_4444(%rip),%zmm27
        vmovdqa64       ddq_addbe_1234(%rip),%zmm28






        vmovd   %xmm2,%r15d
        andl    $255,%r15d

        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpshufb %zmm29,%zmm2,%zmm2



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_823
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_823
.L_next_16_overflow_823:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_823:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        0(%rcx,%r11,1),%zmm0
        vmovdqu8        64(%rcx,%r11,1),%zmm3
        vmovdqu8        128(%rcx,%r11,1),%zmm4
        vmovdqu8        192(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 208(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 224(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,0(%r10,%r11,1)
        vmovdqu8        %zmm10,64(%r10,%r11,1)
        vmovdqu8        %zmm11,128(%r10,%r11,1)
        vmovdqu8        %zmm12,192(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,768(%rsp)
        vmovdqa64       %zmm10,832(%rsp)
        vmovdqa64       %zmm11,896(%rsp)
        vmovdqa64       %zmm12,960(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_824

        vmovdqu64       288(%rsi),%zmm0
        vmovdqu64       %zmm0,704(%rsp)

        vmovdqu64       224(%rsi),%zmm3
        vmovdqu64       %zmm3,640(%rsp)


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       160(%rsi),%zmm4
        vmovdqu64       %zmm4,576(%rsp)

        vmovdqu64       96(%rsi),%zmm5
        vmovdqu64       %zmm5,512(%rsp)
.L_skip_hkeys_precomputation_824:
        cmpq    $512,%r8
        jb      .L_message_below_32_blocks_821



        cmpb    $240,%r15b
        jae     .L_next_16_overflow_825
        vpaddd  %zmm28,%zmm2,%zmm7
        vpaddd  %zmm27,%zmm7,%zmm10
        vpaddd  %zmm27,%zmm10,%zmm11
        vpaddd  %zmm27,%zmm11,%zmm12
        jmp     .L_next_16_ok_825
.L_next_16_overflow_825:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm12
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm7
        vpaddd  %zmm12,%zmm7,%zmm10
        vpaddd  %zmm12,%zmm10,%zmm11
        vpaddd  %zmm12,%zmm11,%zmm12
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vpshufb %zmm29,%zmm12,%zmm12
.L_next_16_ok_825:
        vshufi64x2      $255,%zmm12,%zmm12,%zmm2
        addb    $16,%r15b

        vmovdqu8        256(%rcx,%r11,1),%zmm0
        vmovdqu8        320(%rcx,%r11,1),%zmm3
        vmovdqu8        384(%rcx,%r11,1),%zmm4
        vmovdqu8        448(%rcx,%r11,1),%zmm5


        vbroadcastf64x2 0(%rdi),%zmm6
        vpxorq  %zmm6,%zmm7,%zmm7
        vpxorq  %zmm6,%zmm10,%zmm10
        vpxorq  %zmm6,%zmm11,%zmm11
        vpxorq  %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 16(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 32(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 48(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 64(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 80(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 96(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 112(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 128(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 144(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 160(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 176(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 192(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 208(%rdi),%zmm6
        vaesenc %zmm6,%zmm7,%zmm7
        vaesenc %zmm6,%zmm10,%zmm10
        vaesenc %zmm6,%zmm11,%zmm11
        vaesenc %zmm6,%zmm12,%zmm12
        vbroadcastf64x2 224(%rdi),%zmm6
        vaesenclast     %zmm6,%zmm7,%zmm7
        vaesenclast     %zmm6,%zmm10,%zmm10
        vaesenclast     %zmm6,%zmm11,%zmm11
        vaesenclast     %zmm6,%zmm12,%zmm12


        vpxorq  %zmm0,%zmm7,%zmm7
        vpxorq  %zmm3,%zmm10,%zmm10
        vpxorq  %zmm4,%zmm11,%zmm11
        vpxorq  %zmm5,%zmm12,%zmm12


        movq    %r9,%r10
        vmovdqu8        %zmm7,256(%r10,%r11,1)
        vmovdqu8        %zmm10,320(%r10,%r11,1)
        vmovdqu8        %zmm11,384(%r10,%r11,1)
        vmovdqu8        %zmm12,448(%r10,%r11,1)

        vpshufb %zmm29,%zmm0,%zmm7
        vpshufb %zmm29,%zmm3,%zmm10
        vpshufb %zmm29,%zmm4,%zmm11
        vpshufb %zmm29,%zmm5,%zmm12
        vmovdqa64       %zmm7,1024(%rsp)
        vmovdqa64       %zmm10,1088(%rsp)
        vmovdqa64       %zmm11,1152(%rsp)
        vmovdqa64       %zmm12,1216(%rsp)
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_826
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,192(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,128(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,64(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,0(%rsp)
.L_skip_hkeys_precomputation_826:
        movq    $1,%r14
        addq    $512,%r11
        subq    $512,%r8

        cmpq    $768,%r8
        jb      .L_no_more_big_nblocks_821
.L_encrypt_big_nblocks_821:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_827
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_827
.L_16_blocks_overflow_827:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_827:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_828
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_828
.L_16_blocks_overflow_828:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_828:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_829
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_829
.L_16_blocks_overflow_829:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_829:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        512(%rcx,%r11,1),%zmm17
        vmovdqu8        576(%rcx,%r11,1),%zmm19
        vmovdqu8        640(%rcx,%r11,1),%zmm20
        vmovdqu8        704(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30


        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10

        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpternlogq      $0x96,%zmm15,%zmm12,%zmm6
        vpxorq  %zmm24,%zmm6,%zmm6
        vpternlogq      $0x96,%zmm10,%zmm13,%zmm7
        vpxorq  %zmm25,%zmm7,%zmm7
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vextracti64x4   $1,%zmm6,%ymm12
        vpxorq  %ymm12,%ymm6,%ymm6
        vextracti32x4   $1,%ymm6,%xmm12
        vpxorq  %xmm12,%xmm6,%xmm6
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm6
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,512(%r10,%r11,1)
        vmovdqu8        %zmm3,576(%r10,%r11,1)
        vmovdqu8        %zmm4,640(%r10,%r11,1)
        vmovdqu8        %zmm5,704(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1024(%rsp)
        vmovdqa64       %zmm3,1088(%rsp)
        vmovdqa64       %zmm4,1152(%rsp)
        vmovdqa64       %zmm5,1216(%rsp)
        vmovdqa64       %zmm6,%zmm14

        addq    $768,%r11
        subq    $768,%r8
        cmpq    $768,%r8
        jae     .L_encrypt_big_nblocks_821

.L_no_more_big_nblocks_821:

        cmpq    $512,%r8
        jae     .L_encrypt_32_blocks_821

        cmpq    $256,%r8
        jae     .L_encrypt_16_blocks_821
.L_encrypt_0_blocks_ghash_32_821:
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $256,%ebx
        subl    %r10d,%ebx
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        addl    $256,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_830

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_830
        jb      .L_last_num_blocks_is_7_1_830


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_830
        jb      .L_last_num_blocks_is_11_9_830


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_830
        ja      .L_last_num_blocks_is_16_830
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_830
        jmp     .L_last_num_blocks_is_13_830

.L_last_num_blocks_is_11_9_830:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_830
        ja      .L_last_num_blocks_is_11_830
        jmp     .L_last_num_blocks_is_9_830

.L_last_num_blocks_is_7_1_830:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_830
        jb      .L_last_num_blocks_is_3_1_830

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_830
        je      .L_last_num_blocks_is_6_830
        jmp     .L_last_num_blocks_is_5_830

.L_last_num_blocks_is_3_1_830:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_830
        je      .L_last_num_blocks_is_2_830
.L_last_num_blocks_is_1_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_831
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_831

.L_16_blocks_overflow_831:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_831:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_832





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_832
.L_small_initial_partial_block_832:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_832
.L_small_initial_compute_done_832:
.L_after_reduction_832:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_2_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_833
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_833

.L_16_blocks_overflow_833:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_833:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_834





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_834
.L_small_initial_partial_block_834:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_834:

        orq     %r8,%r8
        je      .L_after_reduction_834
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_834:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_3_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_835
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_835

.L_16_blocks_overflow_835:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_835:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_836





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_836
.L_small_initial_partial_block_836:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_836:

        orq     %r8,%r8
        je      .L_after_reduction_836
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_836:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_4_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_837
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_837

.L_16_blocks_overflow_837:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_837:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_838





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_838
.L_small_initial_partial_block_838:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_838:

        orq     %r8,%r8
        je      .L_after_reduction_838
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_838:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_5_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_839
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_839

.L_16_blocks_overflow_839:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_839:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_840





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_840
.L_small_initial_partial_block_840:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_840:

        orq     %r8,%r8
        je      .L_after_reduction_840
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_840:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_6_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_841
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_841

.L_16_blocks_overflow_841:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_841:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_842





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_842
.L_small_initial_partial_block_842:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_842:

        orq     %r8,%r8
        je      .L_after_reduction_842
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_842:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_7_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_843
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_843

.L_16_blocks_overflow_843:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_843:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_844





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_844
.L_small_initial_partial_block_844:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_844:

        orq     %r8,%r8
        je      .L_after_reduction_844
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_844:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_8_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_845
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_845

.L_16_blocks_overflow_845:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_845:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_846





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_846
.L_small_initial_partial_block_846:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_846:

        orq     %r8,%r8
        je      .L_after_reduction_846
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_846:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_9_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_847
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_847

.L_16_blocks_overflow_847:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_847:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_848





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_848
.L_small_initial_partial_block_848:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_848:

        orq     %r8,%r8
        je      .L_after_reduction_848
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_848:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_10_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_849
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_849

.L_16_blocks_overflow_849:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_849:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_850





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_850
.L_small_initial_partial_block_850:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_850:

        orq     %r8,%r8
        je      .L_after_reduction_850
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_850:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_11_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_851
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_851

.L_16_blocks_overflow_851:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_851:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_852





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_852
.L_small_initial_partial_block_852:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_852:

        orq     %r8,%r8
        je      .L_after_reduction_852
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_852:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_12_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_853
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_853

.L_16_blocks_overflow_853:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_853:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_854





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_854
.L_small_initial_partial_block_854:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_854:

        orq     %r8,%r8
        je      .L_after_reduction_854
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_854:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_13_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_855
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_855

.L_16_blocks_overflow_855:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_855:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_856





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_856
.L_small_initial_partial_block_856:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_856:

        orq     %r8,%r8
        je      .L_after_reduction_856
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_856:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_14_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_857
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_857

.L_16_blocks_overflow_857:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_857:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_858





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_858
.L_small_initial_partial_block_858:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_858:

        orq     %r8,%r8
        je      .L_after_reduction_858
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_858:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_15_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_859
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_859

.L_16_blocks_overflow_859:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_859:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_860





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_860
.L_small_initial_partial_block_860:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_860:

        orq     %r8,%r8
        je      .L_after_reduction_860
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_860:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_16_830:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_861
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_861

.L_16_blocks_overflow_861:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_861:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       1088(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       1152(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       1216(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm14,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_862:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_862:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_862:
        jmp     .L_last_blocks_done_830
.L_last_num_blocks_is_0_830:
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_830:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_821
.L_encrypt_32_blocks_821:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_863
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_863
.L_16_blocks_overflow_863:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_863:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_864
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_864
.L_16_blocks_overflow_864:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_864:
        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1024(%rsp),%zmm8
        vmovdqu64       256(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       320(%rsp),%zmm18
        vmovdqa64       1088(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       384(%rsp),%zmm1
        vmovdqa64       1152(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       448(%rsp),%zmm18
        vmovdqa64       1216(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        256(%rcx,%r11,1),%zmm17
        vmovdqu8        320(%rcx,%r11,1),%zmm19
        vmovdqu8        384(%rcx,%r11,1),%zmm20
        vmovdqu8        448(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm15,%zmm10,%zmm26
        vpternlogq      $0x96,%zmm12,%zmm6,%zmm24
        vpternlogq      $0x96,%zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,256(%r10,%r11,1)
        vmovdqu8        %zmm3,320(%r10,%r11,1)
        vmovdqu8        %zmm4,384(%r10,%r11,1)
        vmovdqu8        %zmm5,448(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,768(%rsp)
        vmovdqa64       %zmm3,832(%rsp)
        vmovdqa64       %zmm4,896(%rsp)
        vmovdqa64       %zmm5,960(%rsp)
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

        subq    $512,%r8
        addq    $512,%r11
        movl    %r8d,%r10d
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_865

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_865
        jb      .L_last_num_blocks_is_7_1_865


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_865
        jb      .L_last_num_blocks_is_11_9_865


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_865
        ja      .L_last_num_blocks_is_16_865
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_865
        jmp     .L_last_num_blocks_is_13_865

.L_last_num_blocks_is_11_9_865:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_865
        ja      .L_last_num_blocks_is_11_865
        jmp     .L_last_num_blocks_is_9_865

.L_last_num_blocks_is_7_1_865:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_865
        jb      .L_last_num_blocks_is_3_1_865

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_865
        je      .L_last_num_blocks_is_6_865
        jmp     .L_last_num_blocks_is_5_865

.L_last_num_blocks_is_3_1_865:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_865
        je      .L_last_num_blocks_is_2_865
.L_last_num_blocks_is_1_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_866
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_866

.L_16_blocks_overflow_866:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_866:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_867





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_867
.L_small_initial_partial_block_867:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_867
.L_small_initial_compute_done_867:
.L_after_reduction_867:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_2_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_868
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_868

.L_16_blocks_overflow_868:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_868:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_869





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_869
.L_small_initial_partial_block_869:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_869:

        orq     %r8,%r8
        je      .L_after_reduction_869
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_869:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_3_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_870
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_870

.L_16_blocks_overflow_870:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_870:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_871





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_871
.L_small_initial_partial_block_871:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_871:

        orq     %r8,%r8
        je      .L_after_reduction_871
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_871:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_4_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_872
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_872

.L_16_blocks_overflow_872:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_872:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_873





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_873
.L_small_initial_partial_block_873:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_873:

        orq     %r8,%r8
        je      .L_after_reduction_873
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_873:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_5_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_874
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_874

.L_16_blocks_overflow_874:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_874:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_875





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_875
.L_small_initial_partial_block_875:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_875:

        orq     %r8,%r8
        je      .L_after_reduction_875
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_875:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_6_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_876
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_876

.L_16_blocks_overflow_876:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_876:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_877





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_877
.L_small_initial_partial_block_877:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_877:

        orq     %r8,%r8
        je      .L_after_reduction_877
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_877:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_7_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_878
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_878

.L_16_blocks_overflow_878:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_878:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_879





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_879
.L_small_initial_partial_block_879:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_879:

        orq     %r8,%r8
        je      .L_after_reduction_879
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_879:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_8_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_880
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_880

.L_16_blocks_overflow_880:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_880:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_881





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_881
.L_small_initial_partial_block_881:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_881:

        orq     %r8,%r8
        je      .L_after_reduction_881
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_881:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_9_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_882
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_882

.L_16_blocks_overflow_882:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_882:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_883





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_883
.L_small_initial_partial_block_883:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_883:

        orq     %r8,%r8
        je      .L_after_reduction_883
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_883:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_10_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_884
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_884

.L_16_blocks_overflow_884:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_884:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_885





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_885
.L_small_initial_partial_block_885:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_885:

        orq     %r8,%r8
        je      .L_after_reduction_885
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_885:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_11_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_886
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_886

.L_16_blocks_overflow_886:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_886:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_887





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_887
.L_small_initial_partial_block_887:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_887:

        orq     %r8,%r8
        je      .L_after_reduction_887
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_887:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_12_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_888
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_888

.L_16_blocks_overflow_888:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_888:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_889





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_889
.L_small_initial_partial_block_889:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_889:

        orq     %r8,%r8
        je      .L_after_reduction_889
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_889:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_13_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_890
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_890

.L_16_blocks_overflow_890:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_890:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_891





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_891
.L_small_initial_partial_block_891:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_891:

        orq     %r8,%r8
        je      .L_after_reduction_891
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_891:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_14_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_892
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_892

.L_16_blocks_overflow_892:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_892:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_893





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_893
.L_small_initial_partial_block_893:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_893:

        orq     %r8,%r8
        je      .L_after_reduction_893
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_893:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_15_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_894
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_894

.L_16_blocks_overflow_894:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_894:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_895





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_895
.L_small_initial_partial_block_895:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_895:

        orq     %r8,%r8
        je      .L_after_reduction_895
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_895:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_16_865:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_896
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_896

.L_16_blocks_overflow_896:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_896:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_897:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_897:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_897:
        jmp     .L_last_blocks_done_865
.L_last_num_blocks_is_0_865:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_865:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_821
.L_encrypt_16_blocks_821:
        cmpb    $240,%r15b
        jae     .L_16_blocks_overflow_898
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_898
.L_16_blocks_overflow_898:
        vpshufb %zmm29,%zmm2,%zmm2
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_898:
        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp),%zmm1




        vshufi64x2      $255,%zmm5,%zmm5,%zmm2
        addb    $16,%r15b


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp),%zmm18
        vmovdqa64       832(%rsp),%zmm22







        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30



        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm6
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp),%zmm1
        vmovdqa64       896(%rsp),%zmm8



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp),%zmm18
        vmovdqa64       960(%rsp),%zmm22



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30



        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19


        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31



        vpternlogq      $0x96,%zmm17,%zmm12,%zmm6
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10



        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30



        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21



        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31



        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13


        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm15,%zmm10,%zmm26
        vpxorq  %zmm12,%zmm6,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31

        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30

        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5



        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5



        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1)
        vpshufb %zmm29,%zmm17,%zmm0
        vpshufb %zmm29,%zmm19,%zmm3
        vpshufb %zmm29,%zmm20,%zmm4
        vpshufb %zmm29,%zmm21,%zmm5
        vmovdqa64       %zmm0,1280(%rsp)
        vmovdqa64       %zmm3,1344(%rsp)
        vmovdqa64       %zmm4,1408(%rsp)
        vmovdqa64       %zmm5,1472(%rsp)
        vmovdqa64       1024(%rsp),%zmm13
        vmovdqu64       256(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1088(%rsp),%zmm13
        vmovdqu64       320(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1152(%rsp),%zmm13
        vmovdqu64       384(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1216(%rsp),%zmm13
        vmovdqu64       448(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_899

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_899
        jb      .L_last_num_blocks_is_7_1_899


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_899
        jb      .L_last_num_blocks_is_11_9_899


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_899
        ja      .L_last_num_blocks_is_16_899
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_899
        jmp     .L_last_num_blocks_is_13_899

.L_last_num_blocks_is_11_9_899:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_899
        ja      .L_last_num_blocks_is_11_899
        jmp     .L_last_num_blocks_is_9_899

.L_last_num_blocks_is_7_1_899:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_899
        jb      .L_last_num_blocks_is_3_1_899

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_899
        je      .L_last_num_blocks_is_6_899
        jmp     .L_last_num_blocks_is_5_899

.L_last_num_blocks_is_3_1_899:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_899
        je      .L_last_num_blocks_is_2_899
.L_last_num_blocks_is_1_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_900
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_900

.L_16_blocks_overflow_900:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_900:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %xmm31,%xmm0,%xmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_901





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_901
.L_small_initial_partial_block_901:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)











        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_901
.L_small_initial_compute_done_901:
.L_after_reduction_901:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_2_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_902
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_902

.L_16_blocks_overflow_902:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_902:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %ymm31,%ymm0,%ymm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_903





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_903
.L_small_initial_partial_block_903:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_903:

        orq     %r8,%r8
        je      .L_after_reduction_903
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_903:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_3_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_904
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_904

.L_16_blocks_overflow_904:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_904:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_905





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_905
.L_small_initial_partial_block_905:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_905:

        orq     %r8,%r8
        je      .L_after_reduction_905
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_905:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_4_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_906
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_906

.L_16_blocks_overflow_906:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_906:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_907





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_907
.L_small_initial_partial_block_907:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_907:

        orq     %r8,%r8
        je      .L_after_reduction_907
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_907:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_5_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_908
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_908

.L_16_blocks_overflow_908:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_908:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_909





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_909
.L_small_initial_partial_block_909:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_909:

        orq     %r8,%r8
        je      .L_after_reduction_909
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_909:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_6_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_910
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_910

.L_16_blocks_overflow_910:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_910:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_911





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_911
.L_small_initial_partial_block_911:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_911:

        orq     %r8,%r8
        je      .L_after_reduction_911
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_911:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_7_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_912
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_912

.L_16_blocks_overflow_912:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_912:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_913





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_913
.L_small_initial_partial_block_913:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_913:

        orq     %r8,%r8
        je      .L_after_reduction_913
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_913:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_8_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_914
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_914

.L_16_blocks_overflow_914:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_914:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_915





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_915
.L_small_initial_partial_block_915:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_915:

        orq     %r8,%r8
        je      .L_after_reduction_915
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_915:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_9_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_916
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_916

.L_16_blocks_overflow_916:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_916:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_917





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_917
.L_small_initial_partial_block_917:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_917:

        orq     %r8,%r8
        je      .L_after_reduction_917
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_917:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_10_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_918
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_918

.L_16_blocks_overflow_918:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_918:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_919





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_919
.L_small_initial_partial_block_919:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_919:

        orq     %r8,%r8
        je      .L_after_reduction_919
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_919:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_11_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_920
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_920

.L_16_blocks_overflow_920:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_920:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_921





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_921
.L_small_initial_partial_block_921:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_921:

        orq     %r8,%r8
        je      .L_after_reduction_921
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_921:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_12_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_922
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_922

.L_16_blocks_overflow_922:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_922:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_923





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_923
.L_small_initial_partial_block_923:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_923:

        orq     %r8,%r8
        je      .L_after_reduction_923
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_923:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_13_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_924
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_924

.L_16_blocks_overflow_924:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_924:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_925





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_925
.L_small_initial_partial_block_925:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_925:

        orq     %r8,%r8
        je      .L_after_reduction_925
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_925:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_14_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_926
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_926

.L_16_blocks_overflow_926:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_926:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_927





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_927
.L_small_initial_partial_block_927:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_927:

        orq     %r8,%r8
        je      .L_after_reduction_927
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_927:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_15_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_928
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_928

.L_16_blocks_overflow_928:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_928:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_929





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_929
.L_small_initial_partial_block_929:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_929:

        orq     %r8,%r8
        je      .L_after_reduction_929
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_929:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_16_899:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_930
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_930

.L_16_blocks_overflow_930:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_930:




        vbroadcastf64x2 0(%rdi),%zmm30
        vmovdqa64       1280(%rsp),%zmm8
        vmovdqu64       512(%rsp),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       576(%rsp),%zmm18
        vmovdqa64       1344(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       640(%rsp),%zmm1
        vmovdqa64       1408(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       704(%rsp),%zmm18
        vmovdqa64       1472(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpternlogq      $0x96,%zmm12,%zmm24,%zmm14
        vpternlogq      $0x96,%zmm13,%zmm25,%zmm7
        vpternlogq      $0x96,%zmm15,%zmm26,%zmm10
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vpsrldq $8,%zmm10,%zmm15
        vpslldq $8,%zmm10,%zmm10

        vmovdqa64       POLY2(%rip),%xmm16
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vpxorq  %zmm15,%zmm14,%zmm14
        vpxorq  %zmm10,%zmm7,%zmm7
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vextracti64x4   $1,%zmm14,%ymm12
        vpxorq  %ymm12,%ymm14,%ymm14
        vextracti32x4   $1,%ymm14,%xmm12
        vpxorq  %xmm12,%xmm14,%xmm14
        vextracti64x4   $1,%zmm7,%ymm13
        vpxorq  %ymm13,%ymm7,%ymm7
        vextracti32x4   $1,%ymm7,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm7
        vbroadcastf64x2 176(%rdi),%zmm31
        vpclmulqdq      $0x01,%xmm7,%xmm16,%xmm13
        vpslldq $8,%xmm13,%xmm13
        vpxorq  %xmm13,%xmm7,%xmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vpclmulqdq      $0x00,%xmm13,%xmm16,%xmm12
        vpsrldq $4,%xmm12,%xmm12
        vpclmulqdq      $0x10,%xmm13,%xmm16,%xmm15
        vpslldq $4,%xmm15,%xmm15

        vpternlogq      $0x96,%xmm12,%xmm15,%xmm14
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_931:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vpxorq  %zmm14,%zmm17,%zmm17
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm31,%zmm5,%zmm5
        vpxorq  %zmm8,%zmm0,%zmm0
        vpxorq  %zmm22,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_931:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_931:
        jmp     .L_last_blocks_done_899
.L_last_num_blocks_is_0_899:
        vmovdqa64       1280(%rsp),%zmm13
        vmovdqu64       512(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1344(%rsp),%zmm13
        vmovdqu64       576(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       1408(%rsp),%zmm13
        vmovdqu64       640(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       1472(%rsp),%zmm13
        vmovdqu64       704(%rsp),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_899:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_821

.L_message_below_32_blocks_821:


        subq    $256,%r8
        addq    $256,%r11
        movl    %r8d,%r10d
        testq   %r14,%r14
        jnz     .L_skip_hkeys_precomputation_932
        vmovdqu64       640(%rsp),%zmm3


        vshufi64x2      $0x00,%zmm3,%zmm3,%zmm3

        vmovdqu64       576(%rsp),%zmm4
        vmovdqu64       512(%rsp),%zmm5

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,448(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,384(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm4,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm4,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm4,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm4,%zmm4

        vpsrldq $8,%zmm4,%zmm10
        vpslldq $8,%zmm4,%zmm4
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm4,%zmm4



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm4,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm4,%zmm4



        vpclmulqdq      $0x00,%zmm4,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm4,%zmm10,%zmm4
        vpslldq $4,%zmm4,%zmm4

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm4

        vmovdqu64       %zmm4,320(%rsp)

        vpclmulqdq      $0x11,%zmm3,%zmm5,%zmm6
        vpclmulqdq      $0x00,%zmm3,%zmm5,%zmm7
        vpclmulqdq      $0x01,%zmm3,%zmm5,%zmm10
        vpclmulqdq      $0x10,%zmm3,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm5,%zmm5

        vpsrldq $8,%zmm5,%zmm10
        vpslldq $8,%zmm5,%zmm5
        vpxorq  %zmm10,%zmm6,%zmm6
        vpxorq  %zmm7,%zmm5,%zmm5



        vmovdqu64       POLY2(%rip),%zmm10

        vpclmulqdq      $0x01,%zmm5,%zmm10,%zmm7
        vpslldq $8,%zmm7,%zmm7
        vpxorq  %zmm7,%zmm5,%zmm5



        vpclmulqdq      $0x00,%zmm5,%zmm10,%zmm7
        vpsrldq $4,%zmm7,%zmm7
        vpclmulqdq      $0x10,%zmm5,%zmm10,%zmm5
        vpslldq $4,%zmm5,%zmm5

        vpternlogq      $0x96,%zmm7,%zmm6,%zmm5

        vmovdqu64       %zmm5,256(%rsp)
.L_skip_hkeys_precomputation_932:
        movq    $1,%r14
        andl    $~15,%r10d
        movl    $512,%ebx
        subl    %r10d,%ebx
        movl    %r8d,%r10d
        addl    $15,%r10d
        shrl    $4,%r10d
        je      .L_last_num_blocks_is_0_933

        cmpl    $8,%r10d
        je      .L_last_num_blocks_is_8_933
        jb      .L_last_num_blocks_is_7_1_933


        cmpl    $12,%r10d
        je      .L_last_num_blocks_is_12_933
        jb      .L_last_num_blocks_is_11_9_933


        cmpl    $15,%r10d
        je      .L_last_num_blocks_is_15_933
        ja      .L_last_num_blocks_is_16_933
        cmpl    $14,%r10d
        je      .L_last_num_blocks_is_14_933
        jmp     .L_last_num_blocks_is_13_933

.L_last_num_blocks_is_11_9_933:

        cmpl    $10,%r10d
        je      .L_last_num_blocks_is_10_933
        ja      .L_last_num_blocks_is_11_933
        jmp     .L_last_num_blocks_is_9_933

.L_last_num_blocks_is_7_1_933:
        cmpl    $4,%r10d
        je      .L_last_num_blocks_is_4_933
        jb      .L_last_num_blocks_is_3_1_933

        cmpl    $6,%r10d
        ja      .L_last_num_blocks_is_7_933
        je      .L_last_num_blocks_is_6_933
        jmp     .L_last_num_blocks_is_5_933

.L_last_num_blocks_is_3_1_933:

        cmpl    $2,%r10d
        ja      .L_last_num_blocks_is_3_933
        je      .L_last_num_blocks_is_2_933
.L_last_num_blocks_is_1_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $255,%r15d
        jae     .L_16_blocks_overflow_934
        vpaddd  %xmm28,%xmm2,%xmm0
        jmp     .L_16_blocks_ok_934

.L_16_blocks_overflow_934:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %xmm29,%xmm0,%xmm0
.L_16_blocks_ok_934:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%xmm17{%k1}{z}
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %xmm30,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %xmm31,%xmm0,%xmm0
        vaesenclast     %xmm30,%xmm0,%xmm0
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %xmm29,%xmm17,%xmm17
        vextracti32x4   $0,%zmm17,%xmm7


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_935





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_935
.L_small_initial_partial_block_935:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)


        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm0


        vpclmulqdq      $0x01,%xmm25,%xmm0,%xmm3
        vpslldq $8,%xmm3,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm3


        vpclmulqdq      $0x00,%xmm3,%xmm0,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm3,%xmm0,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm4,%xmm14












        vpxorq  %xmm7,%xmm14,%xmm14

        jmp     .L_after_reduction_935
.L_small_initial_compute_done_935:
.L_after_reduction_935:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_2_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $254,%r15d
        jae     .L_16_blocks_overflow_936
        vpaddd  %ymm28,%ymm2,%ymm0
        jmp     .L_16_blocks_ok_936

.L_16_blocks_overflow_936:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %ymm29,%ymm0,%ymm0
.L_16_blocks_ok_936:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%ymm17{%k1}{z}
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %ymm30,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %ymm31,%ymm0,%ymm0
        vaesenclast     %ymm30,%ymm0,%ymm0
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %ymm29,%ymm17,%ymm17
        vextracti32x4   $1,%zmm17,%xmm7
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_937





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_937
.L_small_initial_partial_block_937:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm17,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm17,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm17,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm17,%xmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_937:

        orq     %r8,%r8
        je      .L_after_reduction_937
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_937:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_3_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $253,%r15d
        jae     .L_16_blocks_overflow_938
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_938

.L_16_blocks_overflow_938:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_938:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $2,%zmm17,%xmm7
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_939





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_939
.L_small_initial_partial_block_939:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm17,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm17,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm17,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm17,%ymm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_939:

        orq     %r8,%r8
        je      .L_after_reduction_939
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_939:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_4_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $252,%r15d
        jae     .L_16_blocks_overflow_940
        vpaddd  %zmm28,%zmm2,%zmm0
        jmp     .L_16_blocks_ok_940

.L_16_blocks_overflow_940:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpshufb %zmm29,%zmm0,%zmm0
.L_16_blocks_ok_940:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm0,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm0,%zmm0
        vpxorq  %zmm17,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm17,%zmm17{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vextracti32x4   $3,%zmm17,%xmm7
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_941





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_941
.L_small_initial_partial_block_941:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpxorq  %zmm26,%zmm4,%zmm4
        vpxorq  %zmm24,%zmm0,%zmm0
        vpxorq  %zmm25,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_941:

        orq     %r8,%r8
        je      .L_after_reduction_941
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_941:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_5_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $251,%r15d
        jae     .L_16_blocks_overflow_942
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %xmm27,%xmm0,%xmm3
        jmp     .L_16_blocks_ok_942

.L_16_blocks_overflow_942:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
.L_16_blocks_ok_942:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%xmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %xmm30,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %xmm31,%xmm3,%xmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %xmm30,%xmm3,%xmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %xmm19,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %xmm29,%xmm19,%xmm19
        vextracti32x4   $0,%zmm19,%xmm7
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_943





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_943
.L_small_initial_partial_block_943:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_943:

        orq     %r8,%r8
        je      .L_after_reduction_943
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_943:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_6_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $250,%r15d
        jae     .L_16_blocks_overflow_944
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %ymm27,%ymm0,%ymm3
        jmp     .L_16_blocks_ok_944

.L_16_blocks_overflow_944:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
.L_16_blocks_ok_944:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%ymm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %ymm30,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %ymm31,%ymm3,%ymm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %ymm30,%ymm3,%ymm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %ymm29,%ymm19,%ymm19
        vextracti32x4   $1,%zmm19,%xmm7
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_945





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_945
.L_small_initial_partial_block_945:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm19,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm19,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm19,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm19,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_945:

        orq     %r8,%r8
        je      .L_after_reduction_945
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_945:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_7_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $249,%r15d
        jae     .L_16_blocks_overflow_946
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_946

.L_16_blocks_overflow_946:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_946:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $2,%zmm19,%xmm7
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_947





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_947
.L_small_initial_partial_block_947:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm19,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm19,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm19,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm19,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_947:

        orq     %r8,%r8
        je      .L_after_reduction_947
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_947:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_8_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $64,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $248,%r15d
        jae     .L_16_blocks_overflow_948
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        jmp     .L_16_blocks_ok_948

.L_16_blocks_overflow_948:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
.L_16_blocks_ok_948:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm3,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm19,%zmm19{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vextracti32x4   $3,%zmm19,%xmm7
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_949





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_949
.L_small_initial_partial_block_949:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_949:

        orq     %r8,%r8
        je      .L_after_reduction_949
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_949:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_9_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $247,%r15d
        jae     .L_16_blocks_overflow_950
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %xmm27,%xmm3,%xmm4
        jmp     .L_16_blocks_ok_950

.L_16_blocks_overflow_950:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
.L_16_blocks_ok_950:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%xmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %xmm30,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %xmm31,%xmm4,%xmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %xmm30,%xmm4,%xmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %xmm20,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %xmm29,%xmm20,%xmm20
        vextracti32x4   $0,%zmm20,%xmm7
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_951





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_951
.L_small_initial_partial_block_951:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_951:

        orq     %r8,%r8
        je      .L_after_reduction_951
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_951:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_10_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $246,%r15d
        jae     .L_16_blocks_overflow_952
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %ymm27,%ymm3,%ymm4
        jmp     .L_16_blocks_ok_952

.L_16_blocks_overflow_952:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
.L_16_blocks_ok_952:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%ymm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %ymm30,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %ymm31,%ymm4,%ymm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %ymm30,%ymm4,%ymm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %ymm20,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %ymm29,%ymm20,%ymm20
        vextracti32x4   $1,%zmm20,%xmm7
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_953





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_953
.L_small_initial_partial_block_953:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm20,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm20,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm20,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm20,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_953:

        orq     %r8,%r8
        je      .L_after_reduction_953
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_953:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_11_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $245,%r15d
        jae     .L_16_blocks_overflow_954
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_954

.L_16_blocks_overflow_954:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_954:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $2,%zmm20,%xmm7
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_955





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_955
.L_small_initial_partial_block_955:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm20,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm20,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm20,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm20,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_955:

        orq     %r8,%r8
        je      .L_after_reduction_955
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_955:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_12_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $128,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $244,%r15d
        jae     .L_16_blocks_overflow_956
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        jmp     .L_16_blocks_ok_956

.L_16_blocks_overflow_956:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
.L_16_blocks_ok_956:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm4,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm20,%zmm20{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vextracti32x4   $3,%zmm20,%xmm7
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_957





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_957
.L_small_initial_partial_block_957:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vpxorq  %zmm8,%zmm0,%zmm8
        vpxorq  %zmm22,%zmm3,%zmm22
        vpxorq  %zmm30,%zmm4,%zmm30
        vpxorq  %zmm31,%zmm5,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_957:

        orq     %r8,%r8
        je      .L_after_reduction_957
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_957:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_13_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $243,%r15d
        jae     .L_16_blocks_overflow_958
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %xmm27,%xmm4,%xmm5
        jmp     .L_16_blocks_ok_958

.L_16_blocks_overflow_958:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
.L_16_blocks_ok_958:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $0,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%xmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %xmm30,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %xmm31,%xmm5,%xmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %xmm30,%xmm5,%xmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %xmm21,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %xmm29,%xmm21,%xmm21
        vextracti32x4   $0,%zmm21,%xmm7
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_959





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_959
.L_small_initial_partial_block_959:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       160(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       224(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       288(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31

        vpxorq  %zmm26,%zmm30,%zmm30
        vpxorq  %zmm24,%zmm8,%zmm8
        vpxorq  %zmm25,%zmm22,%zmm22

        vpxorq  %zmm31,%zmm30,%zmm30
        vpsrldq $8,%zmm30,%zmm4
        vpslldq $8,%zmm30,%zmm5
        vpxorq  %zmm4,%zmm8,%zmm0
        vpxorq  %zmm5,%zmm22,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_959:

        orq     %r8,%r8
        je      .L_after_reduction_959
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_959:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_14_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $242,%r15d
        jae     .L_16_blocks_overflow_960
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %ymm27,%ymm4,%ymm5
        jmp     .L_16_blocks_ok_960

.L_16_blocks_overflow_960:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
.L_16_blocks_ok_960:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $1,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%ymm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %ymm30,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %ymm31,%ymm5,%ymm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %ymm30,%ymm5,%ymm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %ymm21,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %ymm29,%ymm21,%ymm21
        vextracti32x4   $1,%zmm21,%xmm7
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_961





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_961
.L_small_initial_partial_block_961:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       144(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       208(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       272(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       336(%rsi),%xmm1
        vpclmulqdq      $0x01,%xmm1,%xmm21,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm21,%xmm5
        vpclmulqdq      $0x11,%xmm1,%xmm21,%xmm0
        vpclmulqdq      $0x00,%xmm1,%xmm21,%xmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_961:

        orq     %r8,%r8
        je      .L_after_reduction_961
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_961:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_15_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $241,%r15d
        jae     .L_16_blocks_overflow_962
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_962

.L_16_blocks_overflow_962:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_962:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $2,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $2,%zmm21,%xmm7
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_963





        subq    $16,%r8
        movq    $0,(%rdx)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_963
.L_small_initial_partial_block_963:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       128(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       192(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       256(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       320(%rsi),%ymm1
        vpclmulqdq      $0x01,%ymm1,%ymm21,%ymm4
        vpclmulqdq      $0x10,%ymm1,%ymm21,%ymm5
        vpclmulqdq      $0x11,%ymm1,%ymm21,%ymm0
        vpclmulqdq      $0x00,%ymm1,%ymm21,%ymm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_963:

        orq     %r8,%r8
        je      .L_after_reduction_963
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_963:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_16_933:
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%rax
        subq    $192,%rax
        kmovq   (%r10,%rax,8),%k1
        cmpl    $240,%r15d
        jae     .L_16_blocks_overflow_964
        vpaddd  %zmm28,%zmm2,%zmm0
        vpaddd  %zmm27,%zmm0,%zmm3
        vpaddd  %zmm27,%zmm3,%zmm4
        vpaddd  %zmm27,%zmm4,%zmm5
        jmp     .L_16_blocks_ok_964

.L_16_blocks_overflow_964:
        vpshufb %zmm29,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vmovdqa64       ddq_add_4444(%rip),%zmm5
        vpaddd  %zmm5,%zmm0,%zmm3
        vpaddd  %zmm5,%zmm3,%zmm4
        vpaddd  %zmm5,%zmm4,%zmm5
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
.L_16_blocks_ok_964:




        vbroadcastf64x2 0(%rdi),%zmm30
        vpxorq  768(%rsp),%zmm14,%zmm8
        vmovdqu64       0(%rsp,%rbx,1),%zmm1
        vextracti32x4   $3,%zmm5,%xmm2
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2


        vbroadcastf64x2 16(%rdi),%zmm31
        vmovdqu64       64(%rsp,%rbx,1),%zmm18
        vmovdqa64       832(%rsp),%zmm22
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm30,%zmm3,%zmm3
        vpxorq  %zmm30,%zmm4,%zmm4
        vpxorq  %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm30


        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm14
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm7
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm10
        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm11
        vmovdqu64       128(%rsp,%rbx,1),%zmm1
        vmovdqa64       896(%rsp),%zmm8
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm18
        vmovdqa64       960(%rsp),%zmm22
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm30


        vpclmulqdq      $0x10,%zmm1,%zmm8,%zmm20
        vpclmulqdq      $0x01,%zmm1,%zmm8,%zmm21
        vpclmulqdq      $0x11,%zmm1,%zmm8,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm8,%zmm19
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm31


        vpternlogq      $0x96,%zmm17,%zmm12,%zmm14
        vpternlogq      $0x96,%zmm19,%zmm13,%zmm7
        vpternlogq      $0x96,%zmm21,%zmm16,%zmm11
        vpternlogq      $0x96,%zmm20,%zmm15,%zmm10
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm30
        vmovdqu8        0(%rcx,%r11,1),%zmm17
        vmovdqu8        64(%rcx,%r11,1),%zmm19
        vmovdqu8        128(%rcx,%r11,1),%zmm20
        vmovdqu8        192(%rcx,%r11,1),%zmm21{%k1}{z}
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm31


        vpclmulqdq      $0x10,%zmm18,%zmm22,%zmm15
        vpclmulqdq      $0x01,%zmm18,%zmm22,%zmm16
        vpclmulqdq      $0x11,%zmm18,%zmm22,%zmm12
        vpclmulqdq      $0x00,%zmm18,%zmm22,%zmm13
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm30
        vpternlogq      $0x96,%zmm16,%zmm11,%zmm10
        vpxorq  %zmm12,%zmm14,%zmm24
        vpxorq  %zmm13,%zmm7,%zmm25
        vpxorq  %zmm15,%zmm10,%zmm26
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm31
        vaesenc %zmm30,%zmm0,%zmm0
        vaesenc %zmm30,%zmm3,%zmm3
        vaesenc %zmm30,%zmm4,%zmm4
        vaesenc %zmm30,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm30
        vaesenc %zmm31,%zmm0,%zmm0
        vaesenc %zmm31,%zmm3,%zmm3
        vaesenc %zmm31,%zmm4,%zmm4
        vaesenc %zmm31,%zmm5,%zmm5
        vaesenclast     %zmm30,%zmm0,%zmm0
        vaesenclast     %zmm30,%zmm3,%zmm3
        vaesenclast     %zmm30,%zmm4,%zmm4
        vaesenclast     %zmm30,%zmm5,%zmm5
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vpxorq  %zmm20,%zmm4,%zmm4
        vpxorq  %zmm21,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm11
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm21,%zmm21{%k1}{z}
        vpshufb %zmm29,%zmm17,%zmm17
        vpshufb %zmm29,%zmm19,%zmm19
        vpshufb %zmm29,%zmm20,%zmm20
        vpshufb %zmm29,%zmm21,%zmm21
        vextracti32x4   $3,%zmm21,%xmm7
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_965:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm11,16(%rsi)
        vmovdqu64       112(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm17,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm17,%zmm3
        vpclmulqdq      $0x01,%zmm1,%zmm17,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm17,%zmm5
        vmovdqu64       176(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm19,%zmm8
        vpclmulqdq      $0x00,%zmm1,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm19,%zmm30
        vpclmulqdq      $0x10,%zmm1,%zmm19,%zmm31
        vmovdqu64       240(%rsi),%zmm1
        vpclmulqdq      $0x11,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x00,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm0,%zmm17,%zmm8
        vpternlogq      $0x96,%zmm3,%zmm19,%zmm22
        vpclmulqdq      $0x01,%zmm1,%zmm20,%zmm17
        vpclmulqdq      $0x10,%zmm1,%zmm20,%zmm19
        vpternlogq      $0x96,%zmm4,%zmm17,%zmm30
        vpternlogq      $0x96,%zmm5,%zmm19,%zmm31
        vmovdqu64       304(%rsi),%ymm1
        vinserti64x2    $2,336(%rsi),%zmm1,%zmm1
        vpclmulqdq      $0x01,%zmm1,%zmm21,%zmm4
        vpclmulqdq      $0x10,%zmm1,%zmm21,%zmm5
        vpclmulqdq      $0x11,%zmm1,%zmm21,%zmm0
        vpclmulqdq      $0x00,%zmm1,%zmm21,%zmm3

        vpxorq  %zmm30,%zmm4,%zmm4
        vpternlogq      $0x96,%zmm31,%zmm26,%zmm5
        vpternlogq      $0x96,%zmm8,%zmm24,%zmm0
        vpternlogq      $0x96,%zmm22,%zmm25,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm30
        vpslldq $8,%zmm4,%zmm31
        vpxorq  %zmm30,%zmm0,%zmm0
        vpxorq  %zmm31,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm30
        vpxorq  %ymm30,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm30
        vpxorq  %xmm30,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm31
        vpxorq  %ymm31,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm31
        vpxorq  %xmm31,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm1


        vpclmulqdq      $0x01,%xmm3,%xmm1,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm1,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm1,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_965:
        vpxorq  %xmm7,%xmm14,%xmm14
.L_after_reduction_965:
        jmp     .L_last_blocks_done_933
.L_last_num_blocks_is_0_933:
        vmovdqa64       768(%rsp),%zmm13
        vpxorq  %zmm14,%zmm13,%zmm13
        vmovdqu64       0(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       832(%rsp),%zmm13
        vmovdqu64       64(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11
        vpxorq  %zmm10,%zmm4,%zmm26
        vpxorq  %zmm6,%zmm0,%zmm24
        vpxorq  %zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26
        vmovdqa64       896(%rsp),%zmm13
        vmovdqu64       128(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm0
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm3
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm4
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm5
        vmovdqa64       960(%rsp),%zmm13
        vmovdqu64       192(%rsp,%rbx,1),%zmm12
        vpclmulqdq      $0x11,%zmm12,%zmm13,%zmm6
        vpclmulqdq      $0x00,%zmm12,%zmm13,%zmm7
        vpclmulqdq      $0x01,%zmm12,%zmm13,%zmm10
        vpclmulqdq      $0x10,%zmm12,%zmm13,%zmm11

        vpternlogq      $0x96,%zmm10,%zmm4,%zmm26
        vpternlogq      $0x96,%zmm6,%zmm0,%zmm24
        vpternlogq      $0x96,%zmm7,%zmm3,%zmm25
        vpternlogq      $0x96,%zmm11,%zmm5,%zmm26

        vpsrldq $8,%zmm26,%zmm0
        vpslldq $8,%zmm26,%zmm3
        vpxorq  %zmm0,%zmm24,%zmm24
        vpxorq  %zmm3,%zmm25,%zmm25
        vextracti64x4   $1,%zmm24,%ymm0
        vpxorq  %ymm0,%ymm24,%ymm24
        vextracti32x4   $1,%ymm24,%xmm0
        vpxorq  %xmm0,%xmm24,%xmm24
        vextracti64x4   $1,%zmm25,%ymm3
        vpxorq  %ymm3,%ymm25,%ymm25
        vextracti32x4   $1,%ymm25,%xmm3
        vpxorq  %xmm3,%xmm25,%xmm25
        vmovdqa64       POLY2(%rip),%xmm4


        vpclmulqdq      $0x01,%xmm25,%xmm4,%xmm0
        vpslldq $8,%xmm0,%xmm0
        vpxorq  %xmm0,%xmm25,%xmm0


        vpclmulqdq      $0x00,%xmm0,%xmm4,%xmm3
        vpsrldq $4,%xmm3,%xmm3
        vpclmulqdq      $0x10,%xmm0,%xmm4,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm24,%xmm3,%xmm14

.L_last_blocks_done_933:
        vpshufb %xmm29,%xmm2,%xmm2
        jmp     .L_ghash_done_821

.L_message_below_equal_16_blocks_821:


        movl    %r8d,%r12d
        addl    $15,%r12d
        shrl    $4,%r12d
        cmpq    $8,%r12
        je      .L_small_initial_num_blocks_is_8_966
        jl      .L_small_initial_num_blocks_is_7_1_966


        cmpq    $12,%r12
        je      .L_small_initial_num_blocks_is_12_966
        jl      .L_small_initial_num_blocks_is_11_9_966


        cmpq    $16,%r12
        je      .L_small_initial_num_blocks_is_16_966
        cmpq    $15,%r12
        je      .L_small_initial_num_blocks_is_15_966
        cmpq    $14,%r12
        je      .L_small_initial_num_blocks_is_14_966
        jmp     .L_small_initial_num_blocks_is_13_966

.L_small_initial_num_blocks_is_11_9_966:

        cmpq    $11,%r12
        je      .L_small_initial_num_blocks_is_11_966
        cmpq    $10,%r12
        je      .L_small_initial_num_blocks_is_10_966
        jmp     .L_small_initial_num_blocks_is_9_966

.L_small_initial_num_blocks_is_7_1_966:
        cmpq    $4,%r12
        je      .L_small_initial_num_blocks_is_4_966
        jl      .L_small_initial_num_blocks_is_3_1_966

        cmpq    $7,%r12
        je      .L_small_initial_num_blocks_is_7_966
        cmpq    $6,%r12
        je      .L_small_initial_num_blocks_is_6_966
        jmp     .L_small_initial_num_blocks_is_5_966

.L_small_initial_num_blocks_is_3_1_966:

        cmpq    $3,%r12
        je      .L_small_initial_num_blocks_is_3_966
        cmpq    $2,%r12
        je      .L_small_initial_num_blocks_is_2_966





.L_small_initial_num_blocks_is_1_966:
        vmovdqa64       SHUF_MASK(%rip),%xmm29
        vpaddd  ONE(%rip),%xmm2,%xmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm0,%xmm2
        vpshufb %xmm29,%xmm0,%xmm0
        vmovdqu8        0(%rcx,%r11,1),%xmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %xmm15,%xmm0,%xmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %xmm15,%xmm0,%xmm0
        vpxorq  %xmm6,%xmm0,%xmm0
        vextracti32x4   $0,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %xmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %xmm29,%xmm6,%xmm6
        vextracti32x4   $0,%zmm6,%xmm13


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_967





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_967
.L_small_initial_partial_block_967:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)











        vpxorq  %xmm13,%xmm14,%xmm14

        jmp     .L_after_reduction_967
.L_small_initial_compute_done_967:
.L_after_reduction_967:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_2_966:
        vmovdqa64       SHUF_MASK(%rip),%ymm29
        vshufi64x2      $0,%ymm2,%ymm2,%ymm0
        vpaddd  ddq_add_1234(%rip),%ymm0,%ymm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm0,%xmm2
        vpshufb %ymm29,%ymm0,%ymm0
        vmovdqu8        0(%rcx,%r11,1),%ymm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %ymm15,%ymm0,%ymm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %ymm15,%ymm0,%ymm0
        vpxorq  %ymm6,%ymm0,%ymm0
        vextracti32x4   $1,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %ymm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %ymm29,%ymm6,%ymm6
        vextracti32x4   $1,%zmm6,%xmm13
        subq    $16 * (2 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_968





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_968
.L_small_initial_partial_block_968:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm6,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm6,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm6,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm6,%xmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_968:

        orq     %r8,%r8
        je      .L_after_reduction_968
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_968:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_3_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $2,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $2,%zmm6,%xmm13
        subq    $16 * (3 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_969





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_969
.L_small_initial_partial_block_969:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm6,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm6,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm6,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm6,%ymm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_969:

        orq     %r8,%r8
        je      .L_after_reduction_969
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_969:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_4_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm0,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vmovdqu8        0(%rcx,%r11,1),%zmm6{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vpxorq  %zmm6,%zmm0,%zmm0
        vextracti32x4   $3,%zmm0,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1){%k1}
        vmovdqu8        %zmm0,%zmm0{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vextracti32x4   $3,%zmm6,%xmm13
        subq    $16 * (4 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_970





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_970
.L_small_initial_partial_block_970:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_970:

        orq     %r8,%r8
        je      .L_after_reduction_970
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_970:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_5_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %xmm29,%xmm3,%xmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%xmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %xmm15,%xmm3,%xmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %xmm15,%xmm3,%xmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %xmm7,%xmm3,%xmm3
        vextracti32x4   $0,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %xmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %xmm29,%xmm7,%xmm7
        vextracti32x4   $0,%zmm7,%xmm13
        subq    $16 * (5 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_971





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_971
.L_small_initial_partial_block_971:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_971:

        orq     %r8,%r8
        je      .L_after_reduction_971
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_971:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_6_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %ymm29,%ymm3,%ymm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%ymm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %ymm15,%ymm3,%ymm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %ymm15,%ymm3,%ymm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %ymm7,%ymm3,%ymm3
        vextracti32x4   $1,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %ymm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %ymm29,%ymm7,%ymm7
        vextracti32x4   $1,%zmm7,%xmm13
        subq    $16 * (6 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_972





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_972
.L_small_initial_partial_block_972:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm7,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm7,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm7,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm7,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_972:

        orq     %r8,%r8
        je      .L_after_reduction_972
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_972:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_7_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $2,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $2,%zmm7,%xmm13
        subq    $16 * (7 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_973





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_973
.L_small_initial_partial_block_973:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm7,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm7,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm7,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm7,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_973:

        orq     %r8,%r8
        je      .L_after_reduction_973
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_973:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_8_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $64,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm3,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vextracti32x4   $3,%zmm3,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1){%k1}
        vmovdqu8        %zmm3,%zmm3{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vextracti32x4   $3,%zmm7,%xmm13
        subq    $16 * (8 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_974





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_974
.L_small_initial_partial_block_974:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_974:

        orq     %r8,%r8
        je      .L_after_reduction_974
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_974:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_9_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %xmm29,%xmm4,%xmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%xmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %xmm15,%xmm4,%xmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %xmm15,%xmm4,%xmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %xmm10,%xmm4,%xmm4
        vextracti32x4   $0,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %xmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %xmm29,%xmm10,%xmm10
        vextracti32x4   $0,%zmm10,%xmm13
        subq    $16 * (9 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_975





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_975
.L_small_initial_partial_block_975:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_975:

        orq     %r8,%r8
        je      .L_after_reduction_975
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_975:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_10_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %ymm29,%ymm4,%ymm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%ymm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %ymm15,%ymm4,%ymm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %ymm15,%ymm4,%ymm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %ymm10,%ymm4,%ymm4
        vextracti32x4   $1,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %ymm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %ymm29,%ymm10,%ymm10
        vextracti32x4   $1,%zmm10,%xmm13
        subq    $16 * (10 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_976





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_976
.L_small_initial_partial_block_976:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm10,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm10,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm10,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm10,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_976:

        orq     %r8,%r8
        je      .L_after_reduction_976
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_976:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_11_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $2,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $2,%zmm10,%xmm13
        subq    $16 * (11 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_977





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_977
.L_small_initial_partial_block_977:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm10,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm10,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm10,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm10,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_977:

        orq     %r8,%r8
        je      .L_after_reduction_977
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_977:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_12_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $128,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm4,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vextracti32x4   $3,%zmm4,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1){%k1}
        vmovdqu8        %zmm4,%zmm4{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vextracti32x4   $3,%zmm10,%xmm13
        subq    $16 * (12 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_978





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_978
.L_small_initial_partial_block_978:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vpxorq  %zmm15,%zmm0,%zmm15
        vpxorq  %zmm16,%zmm3,%zmm16
        vpxorq  %zmm17,%zmm4,%zmm17
        vpxorq  %zmm19,%zmm5,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_978:

        orq     %r8,%r8
        je      .L_after_reduction_978
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_978:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_13_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $0,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %xmm29,%xmm5,%xmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%xmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %xmm15,%xmm5,%xmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %xmm15,%xmm5,%xmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %xmm11,%xmm5,%xmm5
        vextracti32x4   $0,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %xmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %xmm29,%xmm11,%xmm11
        vextracti32x4   $0,%zmm11,%xmm13
        subq    $16 * (13 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_979





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_979
.L_small_initial_partial_block_979:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       160(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       224(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       288(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19

        vpxorq  %zmm19,%zmm17,%zmm17
        vpsrldq $8,%zmm17,%zmm4
        vpslldq $8,%zmm17,%zmm5
        vpxorq  %zmm4,%zmm15,%zmm0
        vpxorq  %zmm5,%zmm16,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_979:

        orq     %r8,%r8
        je      .L_after_reduction_979
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_979:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_14_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $1,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %ymm29,%ymm5,%ymm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%ymm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %ymm15,%ymm5,%ymm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %ymm15,%ymm5,%ymm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %ymm11,%ymm5,%ymm5
        vextracti32x4   $1,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %ymm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %ymm29,%ymm11,%ymm11
        vextracti32x4   $1,%zmm11,%xmm13
        subq    $16 * (14 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_980





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_980
.L_small_initial_partial_block_980:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       144(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       208(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       272(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       336(%rsi),%xmm20
        vpclmulqdq      $0x01,%xmm20,%xmm11,%xmm4
        vpclmulqdq      $0x10,%xmm20,%xmm11,%xmm5
        vpclmulqdq      $0x11,%xmm20,%xmm11,%xmm0
        vpclmulqdq      $0x00,%xmm20,%xmm11,%xmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_980:

        orq     %r8,%r8
        je      .L_after_reduction_980
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_980:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_15_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $2,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $2,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $2,%zmm11,%xmm13
        subq    $16 * (15 - 1),%r8


        cmpq    $16,%r8
        jl      .L_small_initial_partial_block_981





        subq    $16,%r8
        movq    $0,(%rdx)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

        jmp     .L_small_initial_compute_done_981
.L_small_initial_partial_block_981:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       128(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       192(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       256(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       320(%rsi),%ymm20
        vpclmulqdq      $0x01,%ymm20,%ymm11,%ymm4
        vpclmulqdq      $0x10,%ymm20,%ymm11,%ymm5
        vpclmulqdq      $0x11,%ymm20,%ymm11,%ymm0
        vpclmulqdq      $0x00,%ymm20,%ymm11,%ymm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_981:

        orq     %r8,%r8
        je      .L_after_reduction_981
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_981:
        jmp     .L_small_initial_blocks_encrypted_966
.L_small_initial_num_blocks_is_16_966:
        vmovdqa64       SHUF_MASK(%rip),%zmm29
        vshufi64x2      $0,%zmm2,%zmm2,%zmm2
        vpaddd  ddq_add_1234(%rip),%zmm2,%zmm0
        vpaddd  ddq_add_5678(%rip),%zmm2,%zmm3
        vpaddd  ddq_add_8888(%rip),%zmm0,%zmm4
        vpaddd  ddq_add_8888(%rip),%zmm3,%zmm5
        leaq    byte64_len_to_mask_table(%rip),%r10
        movq    %r8,%r15
        subq    $192,%r15
        kmovq   (%r10,%r15,8),%k1
        vextracti32x4   $3,%zmm5,%xmm2
        vpshufb %zmm29,%zmm0,%zmm0
        vpshufb %zmm29,%zmm3,%zmm3
        vpshufb %zmm29,%zmm4,%zmm4
        vpshufb %zmm29,%zmm5,%zmm5
        vmovdqu8        0(%rcx,%r11,1),%zmm6
        vmovdqu8        64(%rcx,%r11,1),%zmm7
        vmovdqu8        128(%rcx,%r11,1),%zmm10
        vmovdqu8        192(%rcx,%r11,1),%zmm11{%k1}{z}
        vbroadcastf64x2 0(%rdi),%zmm15
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm15,%zmm3,%zmm3
        vpxorq  %zmm15,%zmm4,%zmm4
        vpxorq  %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 16(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 32(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 48(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 64(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 80(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 96(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 112(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 128(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 144(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 160(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 176(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 192(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 208(%rdi),%zmm15
        vaesenc %zmm15,%zmm0,%zmm0
        vaesenc %zmm15,%zmm3,%zmm3
        vaesenc %zmm15,%zmm4,%zmm4
        vaesenc %zmm15,%zmm5,%zmm5
        vbroadcastf64x2 224(%rdi),%zmm15
        vaesenclast     %zmm15,%zmm0,%zmm0
        vaesenclast     %zmm15,%zmm3,%zmm3
        vaesenclast     %zmm15,%zmm4,%zmm4
        vaesenclast     %zmm15,%zmm5,%zmm5
        vpxorq  %zmm6,%zmm0,%zmm0
        vpxorq  %zmm7,%zmm3,%zmm3
        vpxorq  %zmm10,%zmm4,%zmm4
        vpxorq  %zmm11,%zmm5,%zmm5
        vextracti32x4   $3,%zmm5,%xmm12
        movq    %r9,%r10
        vmovdqu8        %zmm0,0(%r10,%r11,1)
        vmovdqu8        %zmm3,64(%r10,%r11,1)
        vmovdqu8        %zmm4,128(%r10,%r11,1)
        vmovdqu8        %zmm5,192(%r10,%r11,1){%k1}
        vmovdqu8        %zmm5,%zmm5{%k1}{z}
        vpshufb %zmm29,%zmm6,%zmm6
        vpshufb %zmm29,%zmm7,%zmm7
        vpshufb %zmm29,%zmm10,%zmm10
        vpshufb %zmm29,%zmm11,%zmm11
        vextracti32x4   $3,%zmm11,%xmm13
        subq    $16 * (16 - 1),%r8
.L_small_initial_partial_block_982:








        movq    %r8,(%rdx)
        vmovdqu64       %xmm12,16(%rsi)
        vpxorq  %zmm14,%zmm6,%zmm6
        vmovdqu64       112(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm6,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm6,%zmm3
        vpclmulqdq      $0x01,%zmm20,%zmm6,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm6,%zmm5
        vmovdqu64       176(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm7,%zmm15
        vpclmulqdq      $0x00,%zmm20,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm7,%zmm17
        vpclmulqdq      $0x10,%zmm20,%zmm7,%zmm19
        vmovdqu64       240(%rsi),%zmm20
        vpclmulqdq      $0x11,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x00,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm0,%zmm6,%zmm15
        vpternlogq      $0x96,%zmm3,%zmm7,%zmm16
        vpclmulqdq      $0x01,%zmm20,%zmm10,%zmm6
        vpclmulqdq      $0x10,%zmm20,%zmm10,%zmm7
        vpternlogq      $0x96,%zmm4,%zmm6,%zmm17
        vpternlogq      $0x96,%zmm5,%zmm7,%zmm19
        vmovdqu64       304(%rsi),%ymm20
        vinserti64x2    $2,336(%rsi),%zmm20,%zmm20
        vpclmulqdq      $0x01,%zmm20,%zmm11,%zmm4
        vpclmulqdq      $0x10,%zmm20,%zmm11,%zmm5
        vpclmulqdq      $0x11,%zmm20,%zmm11,%zmm0
        vpclmulqdq      $0x00,%zmm20,%zmm11,%zmm3

        vpxorq  %zmm17,%zmm4,%zmm4
        vpxorq  %zmm19,%zmm5,%zmm5
        vpxorq  %zmm15,%zmm0,%zmm0
        vpxorq  %zmm16,%zmm3,%zmm3

        vpxorq  %zmm5,%zmm4,%zmm4
        vpsrldq $8,%zmm4,%zmm17
        vpslldq $8,%zmm4,%zmm19
        vpxorq  %zmm17,%zmm0,%zmm0
        vpxorq  %zmm19,%zmm3,%zmm3
        vextracti64x4   $1,%zmm0,%ymm17
        vpxorq  %ymm17,%ymm0,%ymm0
        vextracti32x4   $1,%ymm0,%xmm17
        vpxorq  %xmm17,%xmm0,%xmm0
        vextracti64x4   $1,%zmm3,%ymm19
        vpxorq  %ymm19,%ymm3,%ymm3
        vextracti32x4   $1,%ymm3,%xmm19
        vpxorq  %xmm19,%xmm3,%xmm3
        vmovdqa64       POLY2(%rip),%xmm20


        vpclmulqdq      $0x01,%xmm3,%xmm20,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm3,%xmm4


        vpclmulqdq      $0x00,%xmm4,%xmm20,%xmm5
        vpsrldq $4,%xmm5,%xmm5
        vpclmulqdq      $0x10,%xmm4,%xmm20,%xmm14
        vpslldq $4,%xmm14,%xmm14
        vpternlogq      $0x96,%xmm0,%xmm5,%xmm14

.L_small_initial_compute_done_982:
        vpxorq  %xmm13,%xmm14,%xmm14
.L_after_reduction_982:
.L_small_initial_blocks_encrypted_966:
.L_ghash_done_821:
        vmovdqu64       %xmm2,0(%rsi)
        vmovdqu64       %xmm14,64(%rsi)
.L_enc_dec_done_821:
        jmp     .Lexit_gcm_decrypt
.Lexit_gcm_decrypt:
        cmpq    $256,%r8
        jbe     .Lskip_hkeys_cleanup_983
        vpxor   %xmm0,%xmm0,%xmm0
        vmovdqa64       %zmm0,0(%rsp)
        vmovdqa64       %zmm0,64(%rsp)
        vmovdqa64       %zmm0,128(%rsp)
        vmovdqa64       %zmm0,192(%rsp)
        vmovdqa64       %zmm0,256(%rsp)
        vmovdqa64       %zmm0,320(%rsp)
        vmovdqa64       %zmm0,384(%rsp)
        vmovdqa64       %zmm0,448(%rsp)
        vmovdqa64       %zmm0,512(%rsp)
        vmovdqa64       %zmm0,576(%rsp)
        vmovdqa64       %zmm0,640(%rsp)
        vmovdqa64       %zmm0,704(%rsp)
.Lskip_hkeys_cleanup_983:
        vzeroupper
        leaq    (%rbp),%rsp
.cfi_def_cfa_register   %rsp
        popq    %r15
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r15
        popq    %r14
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r14
        popq    %r13
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r13
        popq    %r12
.cfi_adjust_cfa_offset  -8
.cfi_restore    %r12
        popq    %rbp
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbp
        popq    %rbx
.cfi_adjust_cfa_offset  -8
.cfi_restore    %rbx
        .byte   0xf3,0xc3
.Ldecrypt_seh_end:
.cfi_endproc
.size   ossl_aes_gcm_decrypt_avx512, .-ossl_aes_gcm_decrypt_avx512
.globl  ossl_aes_gcm_finalize_avx512
.type   ossl_aes_gcm_finalize_avx512,@function
.align  32
ossl_aes_gcm_finalize_avx512:
.cfi_startproc
.byte   243,15,30,250
        vmovdqu 336(%rdi),%xmm2
        vmovdqu 32(%rdi),%xmm3
        vmovdqu 64(%rdi),%xmm4


        cmpq    $0,%rsi
        je      .L_partial_done_984

        vpclmulqdq      $0x11,%xmm2,%xmm4,%xmm0
        vpclmulqdq      $0x00,%xmm2,%xmm4,%xmm16
        vpclmulqdq      $0x01,%xmm2,%xmm4,%xmm17
        vpclmulqdq      $0x10,%xmm2,%xmm4,%xmm4
        vpxorq  %xmm17,%xmm4,%xmm4

        vpsrldq $8,%xmm4,%xmm17
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm17,%xmm0,%xmm0
        vpxorq  %xmm16,%xmm4,%xmm4



        vmovdqu64       POLY2(%rip),%xmm17

        vpclmulqdq      $0x01,%xmm4,%xmm17,%xmm16
        vpslldq $8,%xmm16,%xmm16
        vpxorq  %xmm16,%xmm4,%xmm4



        vpclmulqdq      $0x00,%xmm4,%xmm17,%xmm16
        vpsrldq $4,%xmm16,%xmm16
        vpclmulqdq      $0x10,%xmm4,%xmm17,%xmm4
        vpslldq $4,%xmm4,%xmm4

        vpternlogq      $0x96,%xmm16,%xmm0,%xmm4

.L_partial_done_984:
        vmovq   56(%rdi),%xmm5
        vpinsrq $1,48(%rdi),%xmm5,%xmm5
        vpsllq  $3,%xmm5,%xmm5

        vpxor   %xmm5,%xmm4,%xmm4

        vpclmulqdq      $0x11,%xmm2,%xmm4,%xmm0
        vpclmulqdq      $0x00,%xmm2,%xmm4,%xmm16
        vpclmulqdq      $0x01,%xmm2,%xmm4,%xmm17
        vpclmulqdq      $0x10,%xmm2,%xmm4,%xmm4
        vpxorq  %xmm17,%xmm4,%xmm4

        vpsrldq $8,%xmm4,%xmm17
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm17,%xmm0,%xmm0
        vpxorq  %xmm16,%xmm4,%xmm4



        vmovdqu64       POLY2(%rip),%xmm17

        vpclmulqdq      $0x01,%xmm4,%xmm17,%xmm16
        vpslldq $8,%xmm16,%xmm16
        vpxorq  %xmm16,%xmm4,%xmm4



        vpclmulqdq      $0x00,%xmm4,%xmm17,%xmm16
        vpsrldq $4,%xmm16,%xmm16
        vpclmulqdq      $0x10,%xmm4,%xmm17,%xmm4
        vpslldq $4,%xmm4,%xmm4

        vpternlogq      $0x96,%xmm16,%xmm0,%xmm4

        vpshufb SHUF_MASK(%rip),%xmm4,%xmm4
        vpxor   %xmm4,%xmm3,%xmm3

.L_return_T_984:
        vmovdqu %xmm3,64(%rdi)
.Labort_finalize:
        .byte   0xf3,0xc3
.cfi_endproc
.size   ossl_aes_gcm_finalize_avx512, .-ossl_aes_gcm_finalize_avx512
.globl  ossl_gcm_gmult_avx512
.hidden ossl_gcm_gmult_avx512
.type   ossl_gcm_gmult_avx512,@function
.align  32
ossl_gcm_gmult_avx512:
.cfi_startproc
.byte   243,15,30,250
        vmovdqu64       (%rdi),%xmm1
        vmovdqu64       336(%rsi),%xmm2

        vpclmulqdq      $0x11,%xmm2,%xmm1,%xmm3
        vpclmulqdq      $0x00,%xmm2,%xmm1,%xmm4
        vpclmulqdq      $0x01,%xmm2,%xmm1,%xmm5
        vpclmulqdq      $0x10,%xmm2,%xmm1,%xmm1
        vpxorq  %xmm5,%xmm1,%xmm1

        vpsrldq $8,%xmm1,%xmm5
        vpslldq $8,%xmm1,%xmm1
        vpxorq  %xmm5,%xmm3,%xmm3
        vpxorq  %xmm4,%xmm1,%xmm1



        vmovdqu64       POLY2(%rip),%xmm5

        vpclmulqdq      $0x01,%xmm1,%xmm5,%xmm4
        vpslldq $8,%xmm4,%xmm4
        vpxorq  %xmm4,%xmm1,%xmm1



        vpclmulqdq      $0x00,%xmm1,%xmm5,%xmm4
        vpsrldq $4,%xmm4,%xmm4
        vpclmulqdq      $0x10,%xmm1,%xmm5,%xmm1
        vpslldq $4,%xmm1,%xmm1

        vpternlogq      $0x96,%xmm4,%xmm3,%xmm1

        vmovdqu64       %xmm1,(%rdi)
        vzeroupper
.Labort_gmult:
        .byte   0xf3,0xc3
.cfi_endproc
.size   ossl_gcm_gmult_avx512, .-ossl_gcm_gmult_avx512
.section        .rodata
.align  16
POLY:.quad      0x0000000000000001, 0xC200000000000000

.align  64
POLY2:
.quad   0x00000001C2000000, 0xC200000000000000
.quad   0x00000001C2000000, 0xC200000000000000
.quad   0x00000001C2000000, 0xC200000000000000
.quad   0x00000001C2000000, 0xC200000000000000

.align  16
TWOONE:.quad    0x0000000000000001, 0x0000000100000000



.align  64
SHUF_MASK:
.quad   0x08090A0B0C0D0E0F, 0x0001020304050607
.quad   0x08090A0B0C0D0E0F, 0x0001020304050607
.quad   0x08090A0B0C0D0E0F, 0x0001020304050607
.quad   0x08090A0B0C0D0E0F, 0x0001020304050607

.align  16
SHIFT_MASK:
.quad   0x0706050403020100, 0x0f0e0d0c0b0a0908

ALL_F:
.quad   0xffffffffffffffff, 0xffffffffffffffff

ZERO:
.quad   0x0000000000000000, 0x0000000000000000

.align  16
ONE:
.quad   0x0000000000000001, 0x0000000000000000

.align  16
ONEf:
.quad   0x0000000000000000, 0x0100000000000000

.align  64
ddq_add_1234:
.quad   0x0000000000000001, 0x0000000000000000
.quad   0x0000000000000002, 0x0000000000000000
.quad   0x0000000000000003, 0x0000000000000000
.quad   0x0000000000000004, 0x0000000000000000

.align  64
ddq_add_5678:
.quad   0x0000000000000005, 0x0000000000000000
.quad   0x0000000000000006, 0x0000000000000000
.quad   0x0000000000000007, 0x0000000000000000
.quad   0x0000000000000008, 0x0000000000000000

.align  64
ddq_add_4444:
.quad   0x0000000000000004, 0x0000000000000000
.quad   0x0000000000000004, 0x0000000000000000
.quad   0x0000000000000004, 0x0000000000000000
.quad   0x0000000000000004, 0x0000000000000000

.align  64
ddq_add_8888:
.quad   0x0000000000000008, 0x0000000000000000
.quad   0x0000000000000008, 0x0000000000000000
.quad   0x0000000000000008, 0x0000000000000000
.quad   0x0000000000000008, 0x0000000000000000

.align  64
ddq_addbe_1234:
.quad   0x0000000000000000, 0x0100000000000000
.quad   0x0000000000000000, 0x0200000000000000
.quad   0x0000000000000000, 0x0300000000000000
.quad   0x0000000000000000, 0x0400000000000000

.align  64
ddq_addbe_4444:
.quad   0x0000000000000000, 0x0400000000000000
.quad   0x0000000000000000, 0x0400000000000000
.quad   0x0000000000000000, 0x0400000000000000
.quad   0x0000000000000000, 0x0400000000000000

.align  64
byte_len_to_mask_table:
.value  0x0000, 0x0001, 0x0003, 0x0007
.value  0x000f, 0x001f, 0x003f, 0x007f
.value  0x00ff, 0x01ff, 0x03ff, 0x07ff
.value  0x0fff, 0x1fff, 0x3fff, 0x7fff
.value  0xffff

.align  64
byte64_len_to_mask_table:
.quad   0x0000000000000000, 0x0000000000000001
.quad   0x0000000000000003, 0x0000000000000007
.quad   0x000000000000000f, 0x000000000000001f
.quad   0x000000000000003f, 0x000000000000007f
.quad   0x00000000000000ff, 0x00000000000001ff
.quad   0x00000000000003ff, 0x00000000000007ff
.quad   0x0000000000000fff, 0x0000000000001fff
.quad   0x0000000000003fff, 0x0000000000007fff
.quad   0x000000000000ffff, 0x000000000001ffff
.quad   0x000000000003ffff, 0x000000000007ffff
.quad   0x00000000000fffff, 0x00000000001fffff
.quad   0x00000000003fffff, 0x00000000007fffff
.quad   0x0000000000ffffff, 0x0000000001ffffff
.quad   0x0000000003ffffff, 0x0000000007ffffff
.quad   0x000000000fffffff, 0x000000001fffffff
.quad   0x000000003fffffff, 0x000000007fffffff
.quad   0x00000000ffffffff, 0x00000001ffffffff
.quad   0x00000003ffffffff, 0x00000007ffffffff
.quad   0x0000000fffffffff, 0x0000001fffffffff
.quad   0x0000003fffffffff, 0x0000007fffffffff
.quad   0x000000ffffffffff, 0x000001ffffffffff
.quad   0x000003ffffffffff, 0x000007ffffffffff
.quad   0x00000fffffffffff, 0x00001fffffffffff
.quad   0x00003fffffffffff, 0x00007fffffffffff
.quad   0x0000ffffffffffff, 0x0001ffffffffffff
.quad   0x0003ffffffffffff, 0x0007ffffffffffff
.quad   0x000fffffffffffff, 0x001fffffffffffff
.quad   0x003fffffffffffff, 0x007fffffffffffff
.quad   0x00ffffffffffffff, 0x01ffffffffffffff
.quad   0x03ffffffffffffff, 0x07ffffffffffffff
.quad   0x0fffffffffffffff, 0x1fffffffffffffff
.quad   0x3fffffffffffffff, 0x7fffffffffffffff
.quad   0xffffffffffffffff
        .section ".note.gnu.property", "a"
        .p2align 3
        .long 1f - 0f
        .long 4f - 1f
        .long 5
0:
        # "GNU" encoded with .byte, since .asciz isn't supported
        # on Solaris.
        .byte 0x47
        .byte 0x4e
        .byte 0x55
        .byte 0
1:
        .p2align 3
        .long 0xc0000002
        .long 3f - 2f
2:
        .long 3
3:
        .p2align 3
4:
