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

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

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

section	.text code align=64

global	ossl_aes_gcm_init_avx512

ALIGN	32
ossl_aes_gcm_init_avx512:

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


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

	vaesenc	xmm16,xmm16,XMMWORD[16+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[32+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[48+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[64+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[80+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[96+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[112+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[128+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[144+rcx]

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

	vaesenc	xmm16,xmm16,XMMWORD[16+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[32+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[48+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[64+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[80+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[96+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[112+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[128+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[144+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[160+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[176+rcx]

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

	vaesenc	xmm16,xmm16,XMMWORD[16+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[32+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[48+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[64+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[80+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[96+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[112+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[128+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[144+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[160+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[176+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[192+rcx]

	vaesenc	xmm16,xmm16,XMMWORD[208+rcx]

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

	vpshufb	xmm16,xmm16,XMMWORD[SHUF_MASK]

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

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

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

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

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



	vmovdqu64	ymm2,YMMWORD[POLY2]

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



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

	vpternlogq	ymm3,ymm0,ymm1,0x96

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

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

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



	vmovdqu64	ymm2,YMMWORD[POLY2]

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



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

	vpternlogq	ymm4,ymm0,ymm1,0x96

	vmovdqu64	YMMWORD[288+rdx],ymm4

	vinserti64x4	zmm4,zmm4,ymm5,1


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

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

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



	vmovdqu64	zmm2,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm0,zmm1,0x96

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

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

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



	vmovdqu64	zmm2,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm5,zmm0,zmm1,0x96

	vmovdqu64	ZMMWORD[160+rdx],zmm5

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

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



	vmovdqu64	zmm2,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm0,zmm1,0x96

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


global	ossl_aes_gcm_setiv_avx512

ALIGN	32
ossl_aes_gcm_setiv_avx512:

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

$L$setiv_seh_push_rbx:
	push	rbp

$L$setiv_seh_push_rbp:
	push	r12

$L$setiv_seh_push_r12:
	push	r13

$L$setiv_seh_push_r13:
	push	r14

$L$setiv_seh_push_r14:
	push	r15

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

	sub	rsp,168
$L$setiv_seh_allocstack_xmm:










	lea	rbp,[160+rsp]

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

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

	xor	rbx,rbx
	vmovdqa64	zmm16,ZMMWORD[SHUF_MASK]

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

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

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


	vshufi64x2	zmm9,zmm9,zmm9,0x00

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

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

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

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

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

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

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

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


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


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

	sub	r11,768
	je	NEAR $L$_CALC_AAD_done_1

	add	r10,768
	jmp	NEAR $L$_get_AAD_loop48x16_1

$L$_exit_AAD_loop48x16_1:

	cmp	r11,512
	jl	NEAR $L$_less_than_32x16_1

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

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

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


	vshufi64x2	zmm9,zmm9,zmm9,0x00

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

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

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

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

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

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

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


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


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

	sub	r11,512
	je	NEAR $L$_CALC_AAD_done_1

	add	r10,512
	jmp	NEAR $L$_less_than_16x16_1

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

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

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

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


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


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

	sub	r11,256
	je	NEAR $L$_CALC_AAD_done_1

	add	r10,256

$L$_less_than_16x16_1:

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


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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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


	vpxorq	xmm2,xmm3,xmm2

	vmovdqu64	xmm1,XMMWORD[336+rdx]

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

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



	vmovdqu64	xmm4,XMMWORD[POLY2]

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



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

	vpternlogq	xmm2,xmm11,xmm3,0x96

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

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


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

	vaesenc	xmm1,xmm1,XMMWORD[16+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[32+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[48+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[64+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[80+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[96+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[112+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[128+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[144+rcx]

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

	vaesenc	xmm1,xmm1,XMMWORD[16+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[32+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[48+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[64+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[80+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[96+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[112+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[128+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[144+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[160+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[176+rcx]

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

	vaesenc	xmm1,xmm1,XMMWORD[16+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[32+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[48+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[64+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[80+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[96+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[112+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[128+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[144+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[160+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[176+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[192+rcx]

	vaesenc	xmm1,xmm1,XMMWORD[208+rcx]

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

	vmovdqu	XMMWORD[32+rdx],xmm1


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

	pop	rdi

	pop	r15

	pop	r14

	pop	r13

	pop	r12

	pop	rbp

	pop	rbx

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


global	ossl_aes_gcm_update_aad_avx512

ALIGN	32
ossl_aes_gcm_update_aad_avx512:

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

$L$ghash_seh_push_rbx:
	push	rbp

$L$ghash_seh_push_rbp:
	push	r12

$L$ghash_seh_push_r12:
	push	r13

$L$ghash_seh_push_r13:
	push	r14

$L$ghash_seh_push_r14:
	push	r15

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

	sub	rsp,168
$L$ghash_seh_allocstack_xmm:










	lea	rbp,[160+rsp]

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

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

	xor	rbx,rbx
	vmovdqa64	zmm16,ZMMWORD[SHUF_MASK]

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

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

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


	vshufi64x2	zmm9,zmm9,zmm9,0x00

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

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

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

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

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

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

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

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


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


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

	sub	r11,768
	je	NEAR $L$_CALC_AAD_done_6

	add	r10,768
	jmp	NEAR $L$_get_AAD_loop48x16_6

$L$_exit_AAD_loop48x16_6:

	cmp	r11,512
	jl	NEAR $L$_less_than_32x16_6

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

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

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


	vshufi64x2	zmm9,zmm9,zmm9,0x00

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

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

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm12

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm10,zmm13,zmm15,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm10

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

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



	vmovdqu64	zmm17,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm12,zmm13,zmm15,0x96

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

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

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

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


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


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

	sub	r11,512
	je	NEAR $L$_CALC_AAD_done_6

	add	r10,512
	jmp	NEAR $L$_less_than_16x16_6

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

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

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

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


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


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

	sub	r11,256
	je	NEAR $L$_CALC_AAD_done_6

	add	r10,256

$L$_less_than_16x16_6:

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


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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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

	pop	rdi

	pop	r15

	pop	r14

	pop	r13

	pop	r12

	pop	rbp

	pop	rbx

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


global	ossl_aes_gcm_encrypt_avx512

ALIGN	32
ossl_aes_gcm_encrypt_avx512:

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

$L$encrypt_seh_push_rbx:
	push	rbp

$L$encrypt_seh_push_rbp:
	push	r12

$L$encrypt_seh_push_r12:
	push	r13

$L$encrypt_seh_push_r13:
	push	r14

$L$encrypt_seh_push_r14:
	push	r15

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

	sub	rsp,168
$L$encrypt_seh_allocstack_xmm:










	lea	rbp,[160+rsp]

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

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


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

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

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



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


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



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

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

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



	vmovdqu64	xmm11,XMMWORD[POLY2]

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



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

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

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

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

$L$_enc_dec_done_11:


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

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

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






	vmovd	r15d,xmm2
	and	r15d,255

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



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

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


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


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


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

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

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

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


	vshufi64x2	zmm3,zmm3,zmm3,0x00

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

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



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

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


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


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


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

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


	vshufi64x2	zmm3,zmm3,zmm3,0x00

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

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

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

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



	vmovdqu64	zmm10,ZMMWORD[POLY2]

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



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

	vpternlogq	zmm5,zmm6,zmm7,0x96

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

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




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


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







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



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



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



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



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



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


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



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



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



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



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



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


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



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



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




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


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







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



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



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



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



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



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


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



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



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



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



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



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


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



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



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




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


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







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



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



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



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



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



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


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



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



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



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



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



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


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


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

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

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

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



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



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

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

$L$_no_more_big_nblocks_10:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_10

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

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

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


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


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

$L$_last_num_blocks_is_11_9_19:

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

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

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

$L$_last_num_blocks_is_3_1_19:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_21





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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_21
$L$_small_initial_partial_block_21:








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


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


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


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












	vpxorq	xmm14,xmm14,xmm7

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_23





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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_23
$L$_small_initial_partial_block_23:








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

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


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


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

$L$_small_initial_compute_done_23:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_25





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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_25
$L$_small_initial_partial_block_25:








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

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


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


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

$L$_small_initial_compute_done_25:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_27





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_27
$L$_small_initial_partial_block_27:








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

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


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


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

$L$_small_initial_compute_done_27:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_29





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_29
$L$_small_initial_partial_block_29:








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

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

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


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


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

$L$_small_initial_compute_done_29:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_31





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_31
$L$_small_initial_partial_block_31:








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

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

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


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


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

$L$_small_initial_compute_done_31:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_33





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_33
$L$_small_initial_partial_block_33:








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

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

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


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


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

$L$_small_initial_compute_done_33:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_35





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_35
$L$_small_initial_partial_block_35:








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

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

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


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


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

$L$_small_initial_compute_done_35:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_37





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_37
$L$_small_initial_partial_block_37:








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

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

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


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


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

$L$_small_initial_compute_done_37:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_39





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_39
$L$_small_initial_partial_block_39:








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

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

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


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


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

$L$_small_initial_compute_done_39:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_41





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_41
$L$_small_initial_partial_block_41:








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

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

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


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


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

$L$_small_initial_compute_done_41:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_43





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_43
$L$_small_initial_partial_block_43:








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

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

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


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


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

$L$_small_initial_compute_done_43:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_45





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_45
$L$_small_initial_partial_block_45:








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

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

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


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


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

$L$_small_initial_compute_done_45:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_47





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_47
$L$_small_initial_partial_block_47:








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

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

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


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


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

$L$_small_initial_compute_done_47:

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

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




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


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


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


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


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


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


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


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_49





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

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

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


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


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

	jmp	NEAR $L$_small_initial_compute_done_49
$L$_small_initial_partial_block_49:








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

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

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


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


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

$L$_small_initial_compute_done_49:

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

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




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


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


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


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


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


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


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








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

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

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


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


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

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

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

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


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


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

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




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


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







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



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



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



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



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



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_53
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_53
$L$_16_blocks_overflow_53:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_53:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_54

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_54
	jb	NEAR $L$_last_num_blocks_is_7_1_54


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_54
	jb	NEAR $L$_last_num_blocks_is_11_9_54


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_54
	ja	NEAR $L$_last_num_blocks_is_16_54
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_54
	jmp	NEAR $L$_last_num_blocks_is_13_54

$L$_last_num_blocks_is_11_9_54:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_54
	ja	NEAR $L$_last_num_blocks_is_11_54
	jmp	NEAR $L$_last_num_blocks_is_9_54

$L$_last_num_blocks_is_7_1_54:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_54
	jb	NEAR $L$_last_num_blocks_is_3_1_54

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_54
	je	NEAR $L$_last_num_blocks_is_6_54
	jmp	NEAR $L$_last_num_blocks_is_5_54

$L$_last_num_blocks_is_3_1_54:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_54
	je	NEAR $L$_last_num_blocks_is_2_54
$L$_last_num_blocks_is_1_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_55
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_55

$L$_16_blocks_overflow_55:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_55:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_56





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_56
$L$_small_initial_partial_block_56:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_56
$L$_small_initial_compute_done_56:
$L$_after_reduction_56:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_2_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_57
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_57

$L$_16_blocks_overflow_57:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_57:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_58





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_58
$L$_small_initial_partial_block_58:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_58:

	or	r13,r13
	je	NEAR $L$_after_reduction_58
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_58:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_3_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_59
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_59

$L$_16_blocks_overflow_59:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_59:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_60





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_60
$L$_small_initial_partial_block_60:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_60:

	or	r13,r13
	je	NEAR $L$_after_reduction_60
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_60:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_4_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_61
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_61

$L$_16_blocks_overflow_61:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_61:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_62





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_62
$L$_small_initial_partial_block_62:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_62:

	or	r13,r13
	je	NEAR $L$_after_reduction_62
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_62:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_5_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_63
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_63

$L$_16_blocks_overflow_63:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_63:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_64





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_64
$L$_small_initial_partial_block_64:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_64:

	or	r13,r13
	je	NEAR $L$_after_reduction_64
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_64:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_6_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_65
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_65

$L$_16_blocks_overflow_65:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_65:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_66





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_66
$L$_small_initial_partial_block_66:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_66:

	or	r13,r13
	je	NEAR $L$_after_reduction_66
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_66:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_7_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_67
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_67

$L$_16_blocks_overflow_67:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_67:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_68





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_68
$L$_small_initial_partial_block_68:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_68:

	or	r13,r13
	je	NEAR $L$_after_reduction_68
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_68:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_8_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_69
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_69

$L$_16_blocks_overflow_69:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_69:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_70





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_70
$L$_small_initial_partial_block_70:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_70:

	or	r13,r13
	je	NEAR $L$_after_reduction_70
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_70:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_9_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_71
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_71

$L$_16_blocks_overflow_71:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_71:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_72





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_72
$L$_small_initial_partial_block_72:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_72:

	or	r13,r13
	je	NEAR $L$_after_reduction_72
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_72:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_10_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_73
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_73

$L$_16_blocks_overflow_73:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_73:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_74





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_74
$L$_small_initial_partial_block_74:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_74:

	or	r13,r13
	je	NEAR $L$_after_reduction_74
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_74:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_11_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_75
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_75

$L$_16_blocks_overflow_75:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_75:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_76





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_76
$L$_small_initial_partial_block_76:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_76:

	or	r13,r13
	je	NEAR $L$_after_reduction_76
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_76:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_12_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_77
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_77

$L$_16_blocks_overflow_77:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_77:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_78





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_78
$L$_small_initial_partial_block_78:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_78:

	or	r13,r13
	je	NEAR $L$_after_reduction_78
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_78:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_13_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_79
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_79

$L$_16_blocks_overflow_79:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_79:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_80





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_80
$L$_small_initial_partial_block_80:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_80:

	or	r13,r13
	je	NEAR $L$_after_reduction_80
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_80:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_14_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_81
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_81

$L$_16_blocks_overflow_81:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_81:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_82





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_82
$L$_small_initial_partial_block_82:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_82:

	or	r13,r13
	je	NEAR $L$_after_reduction_82
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_82:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_15_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_83
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_83

$L$_16_blocks_overflow_83:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_83:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_84





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_84
$L$_small_initial_partial_block_84:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_84:

	or	r13,r13
	je	NEAR $L$_after_reduction_84
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_84:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_16_54:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_85
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_85

$L$_16_blocks_overflow_85:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_85:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_86:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_86:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_86:
	jmp	NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_0_54:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_54:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_10
$L$_encrypt_16_blocks_10:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_87
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_87
$L$_16_blocks_overflow_87:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_87:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_88

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_88
	jb	NEAR $L$_last_num_blocks_is_7_1_88


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_88
	jb	NEAR $L$_last_num_blocks_is_11_9_88


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_88
	ja	NEAR $L$_last_num_blocks_is_16_88
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_88
	jmp	NEAR $L$_last_num_blocks_is_13_88

$L$_last_num_blocks_is_11_9_88:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_88
	ja	NEAR $L$_last_num_blocks_is_11_88
	jmp	NEAR $L$_last_num_blocks_is_9_88

$L$_last_num_blocks_is_7_1_88:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_88
	jb	NEAR $L$_last_num_blocks_is_3_1_88

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_88
	je	NEAR $L$_last_num_blocks_is_6_88
	jmp	NEAR $L$_last_num_blocks_is_5_88

$L$_last_num_blocks_is_3_1_88:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_88
	je	NEAR $L$_last_num_blocks_is_2_88
$L$_last_num_blocks_is_1_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_89
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_89

$L$_16_blocks_overflow_89:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_89:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_90





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_90
$L$_small_initial_partial_block_90:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_90
$L$_small_initial_compute_done_90:
$L$_after_reduction_90:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_2_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_91
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_91

$L$_16_blocks_overflow_91:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_91:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_92





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_92
$L$_small_initial_partial_block_92:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_92:

	or	r13,r13
	je	NEAR $L$_after_reduction_92
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_92:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_3_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_93
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_93

$L$_16_blocks_overflow_93:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_93:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_94





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_94
$L$_small_initial_partial_block_94:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_94:

	or	r13,r13
	je	NEAR $L$_after_reduction_94
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_94:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_4_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_95
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_95

$L$_16_blocks_overflow_95:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_95:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_96





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_96
$L$_small_initial_partial_block_96:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_96:

	or	r13,r13
	je	NEAR $L$_after_reduction_96
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_96:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_5_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_97
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_97

$L$_16_blocks_overflow_97:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_97:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_98





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_98
$L$_small_initial_partial_block_98:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_98:

	or	r13,r13
	je	NEAR $L$_after_reduction_98
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_98:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_6_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_99
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_99

$L$_16_blocks_overflow_99:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_99:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_100





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_100
$L$_small_initial_partial_block_100:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_100:

	or	r13,r13
	je	NEAR $L$_after_reduction_100
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_100:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_7_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_101
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_101

$L$_16_blocks_overflow_101:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_101:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_102





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_102
$L$_small_initial_partial_block_102:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_102:

	or	r13,r13
	je	NEAR $L$_after_reduction_102
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_102:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_8_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_103
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_103

$L$_16_blocks_overflow_103:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_103:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_104





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_104
$L$_small_initial_partial_block_104:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_104:

	or	r13,r13
	je	NEAR $L$_after_reduction_104
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_104:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_9_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_105
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_105

$L$_16_blocks_overflow_105:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_105:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_106





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_106
$L$_small_initial_partial_block_106:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_106:

	or	r13,r13
	je	NEAR $L$_after_reduction_106
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_106:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_10_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_107
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_107

$L$_16_blocks_overflow_107:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_107:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_108





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_108
$L$_small_initial_partial_block_108:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_108:

	or	r13,r13
	je	NEAR $L$_after_reduction_108
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_108:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_11_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_109
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_109

$L$_16_blocks_overflow_109:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_109:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_110





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_110
$L$_small_initial_partial_block_110:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_110:

	or	r13,r13
	je	NEAR $L$_after_reduction_110
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_110:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_12_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_111
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_111

$L$_16_blocks_overflow_111:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_111:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_112





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_112
$L$_small_initial_partial_block_112:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_112:

	or	r13,r13
	je	NEAR $L$_after_reduction_112
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_112:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_13_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_113
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_113

$L$_16_blocks_overflow_113:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_113:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_114





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_114
$L$_small_initial_partial_block_114:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_114:

	or	r13,r13
	je	NEAR $L$_after_reduction_114
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_114:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_14_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_115
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_115

$L$_16_blocks_overflow_115:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_115:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_116





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_116
$L$_small_initial_partial_block_116:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_116:

	or	r13,r13
	je	NEAR $L$_after_reduction_116
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_116:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_15_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_117
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_117

$L$_16_blocks_overflow_117:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_117:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_118





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_118
$L$_small_initial_partial_block_118:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_118:

	or	r13,r13
	je	NEAR $L$_after_reduction_118
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_118:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_16_88:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_119
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_119

$L$_16_blocks_overflow_119:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_119:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_120:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_120:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_120:
	jmp	NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_0_88:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_88:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_10

$L$_message_below_32_blocks_10:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_121
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_121:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_122

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_122
	jb	NEAR $L$_last_num_blocks_is_7_1_122


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_122
	jb	NEAR $L$_last_num_blocks_is_11_9_122


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_122
	ja	NEAR $L$_last_num_blocks_is_16_122
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_122
	jmp	NEAR $L$_last_num_blocks_is_13_122

$L$_last_num_blocks_is_11_9_122:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_122
	ja	NEAR $L$_last_num_blocks_is_11_122
	jmp	NEAR $L$_last_num_blocks_is_9_122

$L$_last_num_blocks_is_7_1_122:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_122
	jb	NEAR $L$_last_num_blocks_is_3_1_122

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_122
	je	NEAR $L$_last_num_blocks_is_6_122
	jmp	NEAR $L$_last_num_blocks_is_5_122

$L$_last_num_blocks_is_3_1_122:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_122
	je	NEAR $L$_last_num_blocks_is_2_122
$L$_last_num_blocks_is_1_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_123
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_123

$L$_16_blocks_overflow_123:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_123:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_124





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_124
$L$_small_initial_partial_block_124:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_124
$L$_small_initial_compute_done_124:
$L$_after_reduction_124:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_2_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_125
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_125

$L$_16_blocks_overflow_125:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_125:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_126





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_126
$L$_small_initial_partial_block_126:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_126:

	or	r13,r13
	je	NEAR $L$_after_reduction_126
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_126:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_3_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_127
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_127

$L$_16_blocks_overflow_127:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_127:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_128





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_128
$L$_small_initial_partial_block_128:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_128:

	or	r13,r13
	je	NEAR $L$_after_reduction_128
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_128:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_4_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_129
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_129

$L$_16_blocks_overflow_129:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_129:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_130





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_130
$L$_small_initial_partial_block_130:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_130:

	or	r13,r13
	je	NEAR $L$_after_reduction_130
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_130:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_5_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_131
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_131

$L$_16_blocks_overflow_131:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_131:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_132





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_132
$L$_small_initial_partial_block_132:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_132:

	or	r13,r13
	je	NEAR $L$_after_reduction_132
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_132:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_6_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_133
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_133

$L$_16_blocks_overflow_133:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_133:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_134





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_134
$L$_small_initial_partial_block_134:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_134:

	or	r13,r13
	je	NEAR $L$_after_reduction_134
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_134:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_7_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_135
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_135

$L$_16_blocks_overflow_135:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_135:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_136





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_136
$L$_small_initial_partial_block_136:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_136:

	or	r13,r13
	je	NEAR $L$_after_reduction_136
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_136:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_8_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_137
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_137

$L$_16_blocks_overflow_137:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_137:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_138





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_138
$L$_small_initial_partial_block_138:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_138:

	or	r13,r13
	je	NEAR $L$_after_reduction_138
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_138:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_9_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_139
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_139

$L$_16_blocks_overflow_139:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_139:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_140





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_140
$L$_small_initial_partial_block_140:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_140:

	or	r13,r13
	je	NEAR $L$_after_reduction_140
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_140:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_10_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_141
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_141

$L$_16_blocks_overflow_141:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_141:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_142





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_142
$L$_small_initial_partial_block_142:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_142:

	or	r13,r13
	je	NEAR $L$_after_reduction_142
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_142:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_11_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_143
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_143

$L$_16_blocks_overflow_143:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_143:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_144





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_144
$L$_small_initial_partial_block_144:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_144:

	or	r13,r13
	je	NEAR $L$_after_reduction_144
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_144:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_12_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_145
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_145

$L$_16_blocks_overflow_145:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_145:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_146





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_146
$L$_small_initial_partial_block_146:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_146:

	or	r13,r13
	je	NEAR $L$_after_reduction_146
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_146:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_13_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_147
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_147

$L$_16_blocks_overflow_147:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_147:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_148





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_148
$L$_small_initial_partial_block_148:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_148:

	or	r13,r13
	je	NEAR $L$_after_reduction_148
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_148:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_14_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_149
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_149

$L$_16_blocks_overflow_149:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_149:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_150





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_150
$L$_small_initial_partial_block_150:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_150:

	or	r13,r13
	je	NEAR $L$_after_reduction_150
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_150:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_15_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_151
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_151

$L$_16_blocks_overflow_151:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_151:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_152





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_152
$L$_small_initial_partial_block_152:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_152:

	or	r13,r13
	je	NEAR $L$_after_reduction_152
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_152:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_16_122:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_153
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_153

$L$_16_blocks_overflow_153:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_153:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_154:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_154:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_154:
	jmp	NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_0_122:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_122:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_10

$L$_message_below_equal_16_blocks_10:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_155
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_155


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_155
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_155


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_155
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_155
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_155
	jmp	NEAR $L$_small_initial_num_blocks_is_13_155

$L$_small_initial_num_blocks_is_11_9_155:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_155
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_155
	jmp	NEAR $L$_small_initial_num_blocks_is_9_155

$L$_small_initial_num_blocks_is_7_1_155:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_155
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_155

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_155
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_155
	jmp	NEAR $L$_small_initial_num_blocks_is_5_155

$L$_small_initial_num_blocks_is_3_1_155:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_155
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_155





$L$_small_initial_num_blocks_is_1_155:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm0,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_156





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_156
$L$_small_initial_partial_block_156:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_156
$L$_small_initial_compute_done_156:
$L$_after_reduction_156:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_2_155:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm0,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_157





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_157
$L$_small_initial_partial_block_157:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_157:

	or	r13,r13
	je	NEAR $L$_after_reduction_157
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_157:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_3_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_158





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_158
$L$_small_initial_partial_block_158:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_158:

	or	r13,r13
	je	NEAR $L$_after_reduction_158
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_158:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_4_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_159





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_159
$L$_small_initial_partial_block_159:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_159:

	or	r13,r13
	je	NEAR $L$_after_reduction_159
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_159:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_5_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	xmm7,xmm3,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_160





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_160
$L$_small_initial_partial_block_160:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_160:

	or	r13,r13
	je	NEAR $L$_after_reduction_160
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_160:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_6_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	ymm7,ymm3,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_161





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_161
$L$_small_initial_partial_block_161:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_161:

	or	r13,r13
	je	NEAR $L$_after_reduction_161
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_161:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_7_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_162





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_162
$L$_small_initial_partial_block_162:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_162:

	or	r13,r13
	je	NEAR $L$_after_reduction_162
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_162:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_8_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_163





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_163
$L$_small_initial_partial_block_163:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_163:

	or	r13,r13
	je	NEAR $L$_after_reduction_163
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_163:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_9_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	xmm10,xmm4,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_164





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_164
$L$_small_initial_partial_block_164:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_164:

	or	r13,r13
	je	NEAR $L$_after_reduction_164
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_164:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_10_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	ymm10,ymm4,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_165





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_165
$L$_small_initial_partial_block_165:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_165:

	or	r13,r13
	je	NEAR $L$_after_reduction_165
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_165:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_11_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_166





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_166
$L$_small_initial_partial_block_166:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_166:

	or	r13,r13
	je	NEAR $L$_after_reduction_166
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_166:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_12_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_167





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_167
$L$_small_initial_partial_block_167:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_167:

	or	r13,r13
	je	NEAR $L$_after_reduction_167
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_167:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_13_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	xmm11,xmm5,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_168





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_168
$L$_small_initial_partial_block_168:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_168:

	or	r13,r13
	je	NEAR $L$_after_reduction_168
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_168:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_14_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	ymm11,ymm5,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_169





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_169
$L$_small_initial_partial_block_169:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_169:

	or	r13,r13
	je	NEAR $L$_after_reduction_169
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_169:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_15_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_170





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_170
$L$_small_initial_partial_block_170:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_170:

	or	r13,r13
	je	NEAR $L$_after_reduction_170
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_170:
	jmp	NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_16_155:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_171:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_171:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_171:
$L$_small_initial_blocks_encrypted_155:
$L$_ghash_done_10:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_10:
	jmp	NEAR $L$exit_gcm_encrypt
ALIGN	32
$L$aes_gcm_encrypt_192_avx512:
	cmp	QWORD[112+rbp],0
	je	NEAR $L$_enc_dec_done_172
	xor	r14,r14
	vmovdqu64	xmm14,XMMWORD[64+rdx]

	mov	r11,QWORD[r8]
	or	r11,r11
	je	NEAR $L$_partial_block_done_173
	mov	r10d,16
	lea	r12,[byte_len_to_mask_table]
	cmp	QWORD[112+rbp],r10
	cmovc	r10,QWORD[112+rbp]
	add	r12,r10
	add	r12,r10
	kmovw	k1,[r12]
	vmovdqu8	xmm0{k1}{z},[r9]

	vmovdqu64	xmm3,XMMWORD[16+rdx]
	vmovdqu64	xmm4,XMMWORD[336+rdx]



	lea	r12,[SHIFT_MASK]
	add	r12,r11
	vmovdqu64	xmm5,XMMWORD[r12]
	vpshufb	xmm3,xmm3,xmm5
	vpxorq	xmm3,xmm3,xmm0


	mov	r13,QWORD[112+rbp]
	add	r13,r11
	sub	r13,16
	jge	NEAR $L$_no_extra_mask_173
	sub	r12,r13
$L$_no_extra_mask_173:



	vmovdqu64	xmm0,XMMWORD[16+r12]
	vpand	xmm3,xmm3,xmm0
	vpshufb	xmm3,xmm3,XMMWORD[SHUF_MASK]
	vpshufb	xmm3,xmm3,xmm5
	vpxorq	xmm14,xmm14,xmm3
	cmp	r13,0
	jl	NEAR $L$_partial_incomplete_173

	vpclmulqdq	xmm7,xmm14,xmm4,0x11
	vpclmulqdq	xmm10,xmm14,xmm4,0x00
	vpclmulqdq	xmm11,xmm14,xmm4,0x01
	vpclmulqdq	xmm14,xmm14,xmm4,0x10
	vpxorq	xmm14,xmm14,xmm11

	vpsrldq	xmm11,xmm14,8
	vpslldq	xmm14,xmm14,8
	vpxorq	xmm7,xmm7,xmm11
	vpxorq	xmm14,xmm14,xmm10



	vmovdqu64	xmm11,XMMWORD[POLY2]

	vpclmulqdq	xmm10,xmm11,xmm14,0x01
	vpslldq	xmm10,xmm10,8
	vpxorq	xmm14,xmm14,xmm10



	vpclmulqdq	xmm10,xmm11,xmm14,0x00
	vpsrldq	xmm10,xmm10,4
	vpclmulqdq	xmm14,xmm11,xmm14,0x10
	vpslldq	xmm14,xmm14,4

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

	mov	r12,r11
	mov	r11,16
	sub	r11,r12
	jmp	NEAR $L$_enc_dec_done_173

$L$_partial_incomplete_173:
	mov	r12,QWORD[112+rbp]
	add	QWORD[r8],r12
	mov	r11,QWORD[112+rbp]

$L$_enc_dec_done_173:


	lea	r12,[byte_len_to_mask_table]
	kmovw	k1,[r11*2+r12]
	vmovdqu64	XMMWORD[64+rdx],xmm14

	vpshufb	xmm3,xmm3,XMMWORD[SHUF_MASK]
	vpshufb	xmm3,xmm3,xmm5
	mov	r12,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_173:
	vmovdqu64	xmm2,XMMWORD[rdx]
	mov	r13,QWORD[112+rbp]
	sub	r13,r11
	je	NEAR $L$_enc_dec_done_172
	cmp	r13,256
	jbe	NEAR $L$_message_below_equal_16_blocks_172

	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vmovdqa64	zmm27,ZMMWORD[ddq_addbe_4444]
	vmovdqa64	zmm28,ZMMWORD[ddq_addbe_1234]






	vmovd	r15d,xmm2
	and	r15d,255

	vshufi64x2	zmm2,zmm2,zmm2,0
	vpshufb	zmm2,zmm2,zmm29



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_174
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_174
$L$_next_16_overflow_174:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_174:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[192+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm12

	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm7
	vmovdqa64	ZMMWORD[832+rsp],zmm10
	vmovdqa64	ZMMWORD[896+rsp],zmm11
	vmovdqa64	ZMMWORD[960+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_175

	vmovdqu64	zmm0,ZMMWORD[288+rdx]
	vmovdqu64	ZMMWORD[704+rsp],zmm0

	vmovdqu64	zmm3,ZMMWORD[224+rdx]
	vmovdqu64	ZMMWORD[640+rsp],zmm3


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[160+rdx]
	vmovdqu64	ZMMWORD[576+rsp],zmm4

	vmovdqu64	zmm5,ZMMWORD[96+rdx]
	vmovdqu64	ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_175:
	cmp	r13,512
	jb	NEAR $L$_message_below_32_blocks_172



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_176
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_176
$L$_next_16_overflow_176:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_176:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[448+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm12

	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm7
	vmovdqa64	ZMMWORD[1088+rsp],zmm10
	vmovdqa64	ZMMWORD[1152+rsp],zmm11
	vmovdqa64	ZMMWORD[1216+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_177
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_177:
	mov	r14,1
	add	r11,512
	sub	r13,512

	cmp	r13,768
	jb	NEAR $L$_no_more_big_nblocks_172
$L$_encrypt_big_nblocks_172:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_178
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_178
$L$_16_blocks_overflow_178:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_178:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_179
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_179
$L$_16_blocks_overflow_179:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_179:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_180
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_180
$L$_16_blocks_overflow_180:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_180:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[512+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[576+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[640+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[704+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]


	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96

	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpternlogq	zmm6,zmm12,zmm15,0x96
	vpxorq	zmm6,zmm6,zmm24
	vpternlogq	zmm7,zmm13,zmm10,0x96
	vpxorq	zmm7,zmm7,zmm25
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vextracti64x4	ymm12,zmm6,1
	vpxorq	ymm6,ymm6,ymm12
	vextracti32x4	xmm12,ymm6,1
	vpxorq	xmm6,xmm6,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm6,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[512+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[576+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[640+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[704+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm0
	vmovdqa64	ZMMWORD[1088+rsp],zmm3
	vmovdqa64	ZMMWORD[1152+rsp],zmm4
	vmovdqa64	ZMMWORD[1216+rsp],zmm5
	vmovdqa64	zmm14,zmm6

	add	r11,768
	sub	r13,768
	cmp	r13,768
	jae	NEAR $L$_encrypt_big_nblocks_172

$L$_no_more_big_nblocks_172:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_172

	cmp	r13,256
	jae	NEAR $L$_encrypt_16_blocks_172
$L$_encrypt_0_blocks_ghash_32_172:
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,256
	sub	ebx,r10d
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	add	ebx,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_181

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_181
	jb	NEAR $L$_last_num_blocks_is_7_1_181


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_181
	jb	NEAR $L$_last_num_blocks_is_11_9_181


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_181
	ja	NEAR $L$_last_num_blocks_is_16_181
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_181
	jmp	NEAR $L$_last_num_blocks_is_13_181

$L$_last_num_blocks_is_11_9_181:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_181
	ja	NEAR $L$_last_num_blocks_is_11_181
	jmp	NEAR $L$_last_num_blocks_is_9_181

$L$_last_num_blocks_is_7_1_181:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_181
	jb	NEAR $L$_last_num_blocks_is_3_1_181

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_181
	je	NEAR $L$_last_num_blocks_is_6_181
	jmp	NEAR $L$_last_num_blocks_is_5_181

$L$_last_num_blocks_is_3_1_181:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_181
	je	NEAR $L$_last_num_blocks_is_2_181
$L$_last_num_blocks_is_1_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_182
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_182

$L$_16_blocks_overflow_182:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_182:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_183





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_183
$L$_small_initial_partial_block_183:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_183
$L$_small_initial_compute_done_183:
$L$_after_reduction_183:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_2_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_184
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_184

$L$_16_blocks_overflow_184:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_184:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_185





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_185
$L$_small_initial_partial_block_185:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_185:

	or	r13,r13
	je	NEAR $L$_after_reduction_185
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_185:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_3_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_186
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_186

$L$_16_blocks_overflow_186:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_186:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_187





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_187
$L$_small_initial_partial_block_187:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_187:

	or	r13,r13
	je	NEAR $L$_after_reduction_187
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_187:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_4_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_188
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_188

$L$_16_blocks_overflow_188:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_188:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_189





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_189
$L$_small_initial_partial_block_189:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_189:

	or	r13,r13
	je	NEAR $L$_after_reduction_189
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_189:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_5_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_190
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_190

$L$_16_blocks_overflow_190:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_190:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_191





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_191
$L$_small_initial_partial_block_191:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_191:

	or	r13,r13
	je	NEAR $L$_after_reduction_191
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_191:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_6_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_192
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_192

$L$_16_blocks_overflow_192:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_192:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_193





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_193
$L$_small_initial_partial_block_193:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_193:

	or	r13,r13
	je	NEAR $L$_after_reduction_193
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_193:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_7_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_194
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_194

$L$_16_blocks_overflow_194:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_194:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_195





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_195
$L$_small_initial_partial_block_195:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_195:

	or	r13,r13
	je	NEAR $L$_after_reduction_195
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_195:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_8_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_196
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_196

$L$_16_blocks_overflow_196:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_196:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_197





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_197
$L$_small_initial_partial_block_197:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_197:

	or	r13,r13
	je	NEAR $L$_after_reduction_197
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_197:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_9_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_198
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_198

$L$_16_blocks_overflow_198:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_198:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_199





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_199
$L$_small_initial_partial_block_199:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_199:

	or	r13,r13
	je	NEAR $L$_after_reduction_199
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_199:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_10_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_200
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_200

$L$_16_blocks_overflow_200:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_200:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_201





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_201
$L$_small_initial_partial_block_201:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_201:

	or	r13,r13
	je	NEAR $L$_after_reduction_201
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_201:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_11_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_202
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_202

$L$_16_blocks_overflow_202:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_202:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_203





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_203
$L$_small_initial_partial_block_203:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_203:

	or	r13,r13
	je	NEAR $L$_after_reduction_203
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_203:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_12_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_204
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_204

$L$_16_blocks_overflow_204:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_204:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_205





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_205
$L$_small_initial_partial_block_205:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_205:

	or	r13,r13
	je	NEAR $L$_after_reduction_205
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_205:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_13_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_206
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_206

$L$_16_blocks_overflow_206:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_206:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_207





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_207
$L$_small_initial_partial_block_207:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_207:

	or	r13,r13
	je	NEAR $L$_after_reduction_207
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_207:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_14_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_208
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_208

$L$_16_blocks_overflow_208:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_208:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_209





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_209
$L$_small_initial_partial_block_209:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_209:

	or	r13,r13
	je	NEAR $L$_after_reduction_209
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_209:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_15_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_210
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_210

$L$_16_blocks_overflow_210:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_210:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_211





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_211
$L$_small_initial_partial_block_211:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_211:

	or	r13,r13
	je	NEAR $L$_after_reduction_211
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_211:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_16_181:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_212
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_212

$L$_16_blocks_overflow_212:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_212:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_213:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_213:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_213:
	jmp	NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_0_181:
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_181:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_172
$L$_encrypt_32_blocks_172:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_214
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_214
$L$_16_blocks_overflow_214:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_214:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_215
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_215
$L$_16_blocks_overflow_215:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_215:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_216

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_216
	jb	NEAR $L$_last_num_blocks_is_7_1_216


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_216
	jb	NEAR $L$_last_num_blocks_is_11_9_216


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_216
	ja	NEAR $L$_last_num_blocks_is_16_216
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_216
	jmp	NEAR $L$_last_num_blocks_is_13_216

$L$_last_num_blocks_is_11_9_216:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_216
	ja	NEAR $L$_last_num_blocks_is_11_216
	jmp	NEAR $L$_last_num_blocks_is_9_216

$L$_last_num_blocks_is_7_1_216:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_216
	jb	NEAR $L$_last_num_blocks_is_3_1_216

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_216
	je	NEAR $L$_last_num_blocks_is_6_216
	jmp	NEAR $L$_last_num_blocks_is_5_216

$L$_last_num_blocks_is_3_1_216:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_216
	je	NEAR $L$_last_num_blocks_is_2_216
$L$_last_num_blocks_is_1_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_217
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_217

$L$_16_blocks_overflow_217:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_217:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_218





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_218
$L$_small_initial_partial_block_218:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_218
$L$_small_initial_compute_done_218:
$L$_after_reduction_218:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_2_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_219
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_219

$L$_16_blocks_overflow_219:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_219:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_220





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_220
$L$_small_initial_partial_block_220:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_220:

	or	r13,r13
	je	NEAR $L$_after_reduction_220
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_220:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_3_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_221
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_221

$L$_16_blocks_overflow_221:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_221:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_222





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_222
$L$_small_initial_partial_block_222:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_222:

	or	r13,r13
	je	NEAR $L$_after_reduction_222
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_222:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_4_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_223
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_223

$L$_16_blocks_overflow_223:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_223:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_224





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_224
$L$_small_initial_partial_block_224:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_224:

	or	r13,r13
	je	NEAR $L$_after_reduction_224
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_224:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_5_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_225
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_225

$L$_16_blocks_overflow_225:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_225:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_226





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_226
$L$_small_initial_partial_block_226:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_226:

	or	r13,r13
	je	NEAR $L$_after_reduction_226
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_226:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_6_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_227
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_227

$L$_16_blocks_overflow_227:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_227:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_228





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_228
$L$_small_initial_partial_block_228:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_228:

	or	r13,r13
	je	NEAR $L$_after_reduction_228
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_228:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_7_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_229
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_229

$L$_16_blocks_overflow_229:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_229:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_230





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_230
$L$_small_initial_partial_block_230:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_230:

	or	r13,r13
	je	NEAR $L$_after_reduction_230
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_230:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_8_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_231
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_231

$L$_16_blocks_overflow_231:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_231:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_232





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_232
$L$_small_initial_partial_block_232:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_232:

	or	r13,r13
	je	NEAR $L$_after_reduction_232
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_232:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_9_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_233
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_233

$L$_16_blocks_overflow_233:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_233:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_234





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_234
$L$_small_initial_partial_block_234:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_234:

	or	r13,r13
	je	NEAR $L$_after_reduction_234
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_234:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_10_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_235
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_235

$L$_16_blocks_overflow_235:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_235:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_236





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_236
$L$_small_initial_partial_block_236:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_236:

	or	r13,r13
	je	NEAR $L$_after_reduction_236
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_236:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_11_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_237
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_237

$L$_16_blocks_overflow_237:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_237:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_238





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_238
$L$_small_initial_partial_block_238:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_238:

	or	r13,r13
	je	NEAR $L$_after_reduction_238
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_238:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_12_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_239
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_239

$L$_16_blocks_overflow_239:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_239:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_240





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_240
$L$_small_initial_partial_block_240:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_240:

	or	r13,r13
	je	NEAR $L$_after_reduction_240
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_240:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_13_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_241
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_241

$L$_16_blocks_overflow_241:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_241:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_242





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_242
$L$_small_initial_partial_block_242:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_242:

	or	r13,r13
	je	NEAR $L$_after_reduction_242
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_242:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_14_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_243
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_243

$L$_16_blocks_overflow_243:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_243:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_244





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_244
$L$_small_initial_partial_block_244:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_244:

	or	r13,r13
	je	NEAR $L$_after_reduction_244
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_244:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_15_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_245
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_245

$L$_16_blocks_overflow_245:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_245:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_246





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_246
$L$_small_initial_partial_block_246:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_246:

	or	r13,r13
	je	NEAR $L$_after_reduction_246
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_246:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_16_216:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_247
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_247

$L$_16_blocks_overflow_247:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_247:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_248:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_248:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_248:
	jmp	NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_0_216:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_216:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_172
$L$_encrypt_16_blocks_172:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_249
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_249
$L$_16_blocks_overflow_249:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_249:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_250

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_250
	jb	NEAR $L$_last_num_blocks_is_7_1_250


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_250
	jb	NEAR $L$_last_num_blocks_is_11_9_250


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_250
	ja	NEAR $L$_last_num_blocks_is_16_250
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_250
	jmp	NEAR $L$_last_num_blocks_is_13_250

$L$_last_num_blocks_is_11_9_250:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_250
	ja	NEAR $L$_last_num_blocks_is_11_250
	jmp	NEAR $L$_last_num_blocks_is_9_250

$L$_last_num_blocks_is_7_1_250:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_250
	jb	NEAR $L$_last_num_blocks_is_3_1_250

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_250
	je	NEAR $L$_last_num_blocks_is_6_250
	jmp	NEAR $L$_last_num_blocks_is_5_250

$L$_last_num_blocks_is_3_1_250:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_250
	je	NEAR $L$_last_num_blocks_is_2_250
$L$_last_num_blocks_is_1_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_251
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_251

$L$_16_blocks_overflow_251:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_251:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_252





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_252
$L$_small_initial_partial_block_252:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_252
$L$_small_initial_compute_done_252:
$L$_after_reduction_252:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_2_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_253
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_253

$L$_16_blocks_overflow_253:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_253:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_254





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_254
$L$_small_initial_partial_block_254:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_254:

	or	r13,r13
	je	NEAR $L$_after_reduction_254
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_254:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_3_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_255
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_255

$L$_16_blocks_overflow_255:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_255:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_256





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_256
$L$_small_initial_partial_block_256:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_256:

	or	r13,r13
	je	NEAR $L$_after_reduction_256
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_256:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_4_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_257
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_257

$L$_16_blocks_overflow_257:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_257:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_258





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_258
$L$_small_initial_partial_block_258:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_258:

	or	r13,r13
	je	NEAR $L$_after_reduction_258
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_258:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_5_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_259
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_259

$L$_16_blocks_overflow_259:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_259:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_260





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_260
$L$_small_initial_partial_block_260:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_260:

	or	r13,r13
	je	NEAR $L$_after_reduction_260
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_260:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_6_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_261
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_261

$L$_16_blocks_overflow_261:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_261:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_262





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_262
$L$_small_initial_partial_block_262:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_262:

	or	r13,r13
	je	NEAR $L$_after_reduction_262
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_262:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_7_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_263
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_263

$L$_16_blocks_overflow_263:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_263:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_264





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_264
$L$_small_initial_partial_block_264:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_264:

	or	r13,r13
	je	NEAR $L$_after_reduction_264
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_264:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_8_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_265
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_265

$L$_16_blocks_overflow_265:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_265:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_266





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_266
$L$_small_initial_partial_block_266:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_266:

	or	r13,r13
	je	NEAR $L$_after_reduction_266
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_266:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_9_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_267
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_267

$L$_16_blocks_overflow_267:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_267:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_268





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_268
$L$_small_initial_partial_block_268:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_268:

	or	r13,r13
	je	NEAR $L$_after_reduction_268
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_268:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_10_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_269
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_269

$L$_16_blocks_overflow_269:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_269:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_270





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_270
$L$_small_initial_partial_block_270:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_270:

	or	r13,r13
	je	NEAR $L$_after_reduction_270
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_270:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_11_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_271
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_271

$L$_16_blocks_overflow_271:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_271:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_272





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_272
$L$_small_initial_partial_block_272:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_272:

	or	r13,r13
	je	NEAR $L$_after_reduction_272
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_272:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_12_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_273
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_273

$L$_16_blocks_overflow_273:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_273:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_274





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_274
$L$_small_initial_partial_block_274:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_274:

	or	r13,r13
	je	NEAR $L$_after_reduction_274
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_274:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_13_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_275
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_275

$L$_16_blocks_overflow_275:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_275:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_276





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_276
$L$_small_initial_partial_block_276:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_276:

	or	r13,r13
	je	NEAR $L$_after_reduction_276
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_276:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_14_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_277
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_277

$L$_16_blocks_overflow_277:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_277:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_278





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_278
$L$_small_initial_partial_block_278:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_278:

	or	r13,r13
	je	NEAR $L$_after_reduction_278
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_278:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_15_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_279
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_279

$L$_16_blocks_overflow_279:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_279:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_280





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_280
$L$_small_initial_partial_block_280:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_280:

	or	r13,r13
	je	NEAR $L$_after_reduction_280
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_280:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_16_250:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_281
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_281

$L$_16_blocks_overflow_281:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_281:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_282:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_282:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_282:
	jmp	NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_0_250:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_250:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_172

$L$_message_below_32_blocks_172:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_283
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_283:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_284

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_284
	jb	NEAR $L$_last_num_blocks_is_7_1_284


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_284
	jb	NEAR $L$_last_num_blocks_is_11_9_284


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_284
	ja	NEAR $L$_last_num_blocks_is_16_284
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_284
	jmp	NEAR $L$_last_num_blocks_is_13_284

$L$_last_num_blocks_is_11_9_284:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_284
	ja	NEAR $L$_last_num_blocks_is_11_284
	jmp	NEAR $L$_last_num_blocks_is_9_284

$L$_last_num_blocks_is_7_1_284:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_284
	jb	NEAR $L$_last_num_blocks_is_3_1_284

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_284
	je	NEAR $L$_last_num_blocks_is_6_284
	jmp	NEAR $L$_last_num_blocks_is_5_284

$L$_last_num_blocks_is_3_1_284:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_284
	je	NEAR $L$_last_num_blocks_is_2_284
$L$_last_num_blocks_is_1_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_285
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_285

$L$_16_blocks_overflow_285:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_285:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_286





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_286
$L$_small_initial_partial_block_286:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_286
$L$_small_initial_compute_done_286:
$L$_after_reduction_286:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_2_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_287
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_287

$L$_16_blocks_overflow_287:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_287:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_288





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_288
$L$_small_initial_partial_block_288:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_288:

	or	r13,r13
	je	NEAR $L$_after_reduction_288
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_288:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_3_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_289
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_289

$L$_16_blocks_overflow_289:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_289:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_290





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_290
$L$_small_initial_partial_block_290:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_290:

	or	r13,r13
	je	NEAR $L$_after_reduction_290
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_290:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_4_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_291
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_291

$L$_16_blocks_overflow_291:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_291:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_292





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_292
$L$_small_initial_partial_block_292:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_292:

	or	r13,r13
	je	NEAR $L$_after_reduction_292
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_292:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_5_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_293
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_293

$L$_16_blocks_overflow_293:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_293:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_294





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_294
$L$_small_initial_partial_block_294:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_294:

	or	r13,r13
	je	NEAR $L$_after_reduction_294
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_294:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_6_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_295
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_295

$L$_16_blocks_overflow_295:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_295:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_296





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_296
$L$_small_initial_partial_block_296:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_296:

	or	r13,r13
	je	NEAR $L$_after_reduction_296
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_296:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_7_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_297
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_297

$L$_16_blocks_overflow_297:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_297:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_298





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_298
$L$_small_initial_partial_block_298:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_298:

	or	r13,r13
	je	NEAR $L$_after_reduction_298
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_298:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_8_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_299
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_299

$L$_16_blocks_overflow_299:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_299:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_300





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_300
$L$_small_initial_partial_block_300:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_300:

	or	r13,r13
	je	NEAR $L$_after_reduction_300
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_300:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_9_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_301
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_301

$L$_16_blocks_overflow_301:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_301:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_302





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_302
$L$_small_initial_partial_block_302:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_302:

	or	r13,r13
	je	NEAR $L$_after_reduction_302
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_302:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_10_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_303
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_303

$L$_16_blocks_overflow_303:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_303:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_304





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_304
$L$_small_initial_partial_block_304:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_304:

	or	r13,r13
	je	NEAR $L$_after_reduction_304
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_304:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_11_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_305
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_305

$L$_16_blocks_overflow_305:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_305:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_306





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_306
$L$_small_initial_partial_block_306:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_306:

	or	r13,r13
	je	NEAR $L$_after_reduction_306
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_306:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_12_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_307
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_307

$L$_16_blocks_overflow_307:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_307:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_308





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_308
$L$_small_initial_partial_block_308:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_308:

	or	r13,r13
	je	NEAR $L$_after_reduction_308
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_308:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_13_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_309
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_309

$L$_16_blocks_overflow_309:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_309:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_310





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_310
$L$_small_initial_partial_block_310:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_310:

	or	r13,r13
	je	NEAR $L$_after_reduction_310
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_310:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_14_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_311
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_311

$L$_16_blocks_overflow_311:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_311:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_312





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_312
$L$_small_initial_partial_block_312:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_312:

	or	r13,r13
	je	NEAR $L$_after_reduction_312
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_312:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_15_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_313
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_313

$L$_16_blocks_overflow_313:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_313:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_314





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_314
$L$_small_initial_partial_block_314:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_314:

	or	r13,r13
	je	NEAR $L$_after_reduction_314
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_314:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_16_284:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_315
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_315

$L$_16_blocks_overflow_315:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_315:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_316:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_316:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_316:
	jmp	NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_0_284:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_284:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_172

$L$_message_below_equal_16_blocks_172:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_317
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_317


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_317
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_317


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_317
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_317
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_317
	jmp	NEAR $L$_small_initial_num_blocks_is_13_317

$L$_small_initial_num_blocks_is_11_9_317:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_317
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_317
	jmp	NEAR $L$_small_initial_num_blocks_is_9_317

$L$_small_initial_num_blocks_is_7_1_317:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_317
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_317

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_317
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_317
	jmp	NEAR $L$_small_initial_num_blocks_is_5_317

$L$_small_initial_num_blocks_is_3_1_317:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_317
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_317





$L$_small_initial_num_blocks_is_1_317:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm0,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_318





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_318
$L$_small_initial_partial_block_318:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_318
$L$_small_initial_compute_done_318:
$L$_after_reduction_318:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_2_317:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm0,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_319





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_319
$L$_small_initial_partial_block_319:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_319:

	or	r13,r13
	je	NEAR $L$_after_reduction_319
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_319:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_3_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_320





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_320
$L$_small_initial_partial_block_320:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_320:

	or	r13,r13
	je	NEAR $L$_after_reduction_320
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_320:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_4_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_321





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_321
$L$_small_initial_partial_block_321:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_321:

	or	r13,r13
	je	NEAR $L$_after_reduction_321
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_321:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_5_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	xmm7,xmm3,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_322





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_322
$L$_small_initial_partial_block_322:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_322:

	or	r13,r13
	je	NEAR $L$_after_reduction_322
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_322:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_6_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	ymm7,ymm3,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_323





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_323
$L$_small_initial_partial_block_323:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_323:

	or	r13,r13
	je	NEAR $L$_after_reduction_323
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_323:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_7_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_324





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_324
$L$_small_initial_partial_block_324:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_324:

	or	r13,r13
	je	NEAR $L$_after_reduction_324
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_324:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_8_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_325





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_325
$L$_small_initial_partial_block_325:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_325:

	or	r13,r13
	je	NEAR $L$_after_reduction_325
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_325:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_9_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	xmm10,xmm4,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_326





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_326
$L$_small_initial_partial_block_326:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_326:

	or	r13,r13
	je	NEAR $L$_after_reduction_326
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_326:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_10_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	ymm10,ymm4,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_327





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_327
$L$_small_initial_partial_block_327:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_327:

	or	r13,r13
	je	NEAR $L$_after_reduction_327
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_327:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_11_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_328





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_328
$L$_small_initial_partial_block_328:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_328:

	or	r13,r13
	je	NEAR $L$_after_reduction_328
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_328:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_12_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_329





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_329
$L$_small_initial_partial_block_329:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_329:

	or	r13,r13
	je	NEAR $L$_after_reduction_329
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_329:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_13_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	xmm11,xmm5,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_330





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_330
$L$_small_initial_partial_block_330:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_330:

	or	r13,r13
	je	NEAR $L$_after_reduction_330
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_330:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_14_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	ymm11,ymm5,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_331





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_331
$L$_small_initial_partial_block_331:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_331:

	or	r13,r13
	je	NEAR $L$_after_reduction_331
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_331:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_15_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_332





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_332
$L$_small_initial_partial_block_332:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_332:

	or	r13,r13
	je	NEAR $L$_after_reduction_332
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_332:
	jmp	NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_16_317:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_333:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_333:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_333:
$L$_small_initial_blocks_encrypted_317:
$L$_ghash_done_172:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_172:
	jmp	NEAR $L$exit_gcm_encrypt
ALIGN	32
$L$aes_gcm_encrypt_256_avx512:
	cmp	QWORD[112+rbp],0
	je	NEAR $L$_enc_dec_done_334
	xor	r14,r14
	vmovdqu64	xmm14,XMMWORD[64+rdx]

	mov	r11,QWORD[r8]
	or	r11,r11
	je	NEAR $L$_partial_block_done_335
	mov	r10d,16
	lea	r12,[byte_len_to_mask_table]
	cmp	QWORD[112+rbp],r10
	cmovc	r10,QWORD[112+rbp]
	add	r12,r10
	add	r12,r10
	kmovw	k1,[r12]
	vmovdqu8	xmm0{k1}{z},[r9]

	vmovdqu64	xmm3,XMMWORD[16+rdx]
	vmovdqu64	xmm4,XMMWORD[336+rdx]



	lea	r12,[SHIFT_MASK]
	add	r12,r11
	vmovdqu64	xmm5,XMMWORD[r12]
	vpshufb	xmm3,xmm3,xmm5
	vpxorq	xmm3,xmm3,xmm0


	mov	r13,QWORD[112+rbp]
	add	r13,r11
	sub	r13,16
	jge	NEAR $L$_no_extra_mask_335
	sub	r12,r13
$L$_no_extra_mask_335:



	vmovdqu64	xmm0,XMMWORD[16+r12]
	vpand	xmm3,xmm3,xmm0
	vpshufb	xmm3,xmm3,XMMWORD[SHUF_MASK]
	vpshufb	xmm3,xmm3,xmm5
	vpxorq	xmm14,xmm14,xmm3
	cmp	r13,0
	jl	NEAR $L$_partial_incomplete_335

	vpclmulqdq	xmm7,xmm14,xmm4,0x11
	vpclmulqdq	xmm10,xmm14,xmm4,0x00
	vpclmulqdq	xmm11,xmm14,xmm4,0x01
	vpclmulqdq	xmm14,xmm14,xmm4,0x10
	vpxorq	xmm14,xmm14,xmm11

	vpsrldq	xmm11,xmm14,8
	vpslldq	xmm14,xmm14,8
	vpxorq	xmm7,xmm7,xmm11
	vpxorq	xmm14,xmm14,xmm10



	vmovdqu64	xmm11,XMMWORD[POLY2]

	vpclmulqdq	xmm10,xmm11,xmm14,0x01
	vpslldq	xmm10,xmm10,8
	vpxorq	xmm14,xmm14,xmm10



	vpclmulqdq	xmm10,xmm11,xmm14,0x00
	vpsrldq	xmm10,xmm10,4
	vpclmulqdq	xmm14,xmm11,xmm14,0x10
	vpslldq	xmm14,xmm14,4

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

	mov	r12,r11
	mov	r11,16
	sub	r11,r12
	jmp	NEAR $L$_enc_dec_done_335

$L$_partial_incomplete_335:
	mov	r12,QWORD[112+rbp]
	add	QWORD[r8],r12
	mov	r11,QWORD[112+rbp]

$L$_enc_dec_done_335:


	lea	r12,[byte_len_to_mask_table]
	kmovw	k1,[r11*2+r12]
	vmovdqu64	XMMWORD[64+rdx],xmm14

	vpshufb	xmm3,xmm3,XMMWORD[SHUF_MASK]
	vpshufb	xmm3,xmm3,xmm5
	mov	r12,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_335:
	vmovdqu64	xmm2,XMMWORD[rdx]
	mov	r13,QWORD[112+rbp]
	sub	r13,r11
	je	NEAR $L$_enc_dec_done_334
	cmp	r13,256
	jbe	NEAR $L$_message_below_equal_16_blocks_334

	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vmovdqa64	zmm27,ZMMWORD[ddq_addbe_4444]
	vmovdqa64	zmm28,ZMMWORD[ddq_addbe_1234]






	vmovd	r15d,xmm2
	and	r15d,255

	vshufi64x2	zmm2,zmm2,zmm2,0
	vpshufb	zmm2,zmm2,zmm29



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_336
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_336
$L$_next_16_overflow_336:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_336:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[192+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[208+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[224+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm12

	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm7
	vmovdqa64	ZMMWORD[832+rsp],zmm10
	vmovdqa64	ZMMWORD[896+rsp],zmm11
	vmovdqa64	ZMMWORD[960+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_337

	vmovdqu64	zmm0,ZMMWORD[288+rdx]
	vmovdqu64	ZMMWORD[704+rsp],zmm0

	vmovdqu64	zmm3,ZMMWORD[224+rdx]
	vmovdqu64	ZMMWORD[640+rsp],zmm3


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[160+rdx]
	vmovdqu64	ZMMWORD[576+rsp],zmm4

	vmovdqu64	zmm5,ZMMWORD[96+rdx]
	vmovdqu64	ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_337:
	cmp	r13,512
	jb	NEAR $L$_message_below_32_blocks_334



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_338
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_338
$L$_next_16_overflow_338:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_338:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[448+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[208+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[224+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm12

	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm7
	vmovdqa64	ZMMWORD[1088+rsp],zmm10
	vmovdqa64	ZMMWORD[1152+rsp],zmm11
	vmovdqa64	ZMMWORD[1216+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_339
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_339:
	mov	r14,1
	add	r11,512
	sub	r13,512

	cmp	r13,768
	jb	NEAR $L$_no_more_big_nblocks_334
$L$_encrypt_big_nblocks_334:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_340
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_340
$L$_16_blocks_overflow_340:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_340:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_341
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_341
$L$_16_blocks_overflow_341:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_341:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_342
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_342
$L$_16_blocks_overflow_342:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_342:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[512+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[576+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[640+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[704+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]


	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96

	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpternlogq	zmm6,zmm12,zmm15,0x96
	vpxorq	zmm6,zmm6,zmm24
	vpternlogq	zmm7,zmm13,zmm10,0x96
	vpxorq	zmm7,zmm7,zmm25
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vextracti64x4	ymm12,zmm6,1
	vpxorq	ymm6,ymm6,ymm12
	vextracti32x4	xmm12,ymm6,1
	vpxorq	xmm6,xmm6,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm6,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[512+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[576+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[640+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[704+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm0
	vmovdqa64	ZMMWORD[1088+rsp],zmm3
	vmovdqa64	ZMMWORD[1152+rsp],zmm4
	vmovdqa64	ZMMWORD[1216+rsp],zmm5
	vmovdqa64	zmm14,zmm6

	add	r11,768
	sub	r13,768
	cmp	r13,768
	jae	NEAR $L$_encrypt_big_nblocks_334

$L$_no_more_big_nblocks_334:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_334

	cmp	r13,256
	jae	NEAR $L$_encrypt_16_blocks_334
$L$_encrypt_0_blocks_ghash_32_334:
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,256
	sub	ebx,r10d
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	add	ebx,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_343

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_343
	jb	NEAR $L$_last_num_blocks_is_7_1_343


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_343
	jb	NEAR $L$_last_num_blocks_is_11_9_343


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_343
	ja	NEAR $L$_last_num_blocks_is_16_343
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_343
	jmp	NEAR $L$_last_num_blocks_is_13_343

$L$_last_num_blocks_is_11_9_343:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_343
	ja	NEAR $L$_last_num_blocks_is_11_343
	jmp	NEAR $L$_last_num_blocks_is_9_343

$L$_last_num_blocks_is_7_1_343:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_343
	jb	NEAR $L$_last_num_blocks_is_3_1_343

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_343
	je	NEAR $L$_last_num_blocks_is_6_343
	jmp	NEAR $L$_last_num_blocks_is_5_343

$L$_last_num_blocks_is_3_1_343:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_343
	je	NEAR $L$_last_num_blocks_is_2_343
$L$_last_num_blocks_is_1_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_344
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_344

$L$_16_blocks_overflow_344:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_344:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_345





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_345
$L$_small_initial_partial_block_345:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_345
$L$_small_initial_compute_done_345:
$L$_after_reduction_345:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_2_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_346
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_346

$L$_16_blocks_overflow_346:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_346:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_347





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_347
$L$_small_initial_partial_block_347:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_347:

	or	r13,r13
	je	NEAR $L$_after_reduction_347
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_347:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_3_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_348
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_348

$L$_16_blocks_overflow_348:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_348:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_349





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_349
$L$_small_initial_partial_block_349:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_349:

	or	r13,r13
	je	NEAR $L$_after_reduction_349
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_349:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_4_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_350
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_350

$L$_16_blocks_overflow_350:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_350:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_351





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_351
$L$_small_initial_partial_block_351:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_351:

	or	r13,r13
	je	NEAR $L$_after_reduction_351
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_351:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_5_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_352
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_352

$L$_16_blocks_overflow_352:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_352:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_353





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_353
$L$_small_initial_partial_block_353:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_353:

	or	r13,r13
	je	NEAR $L$_after_reduction_353
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_353:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_6_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_354
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_354

$L$_16_blocks_overflow_354:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_354:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_355





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_355
$L$_small_initial_partial_block_355:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_355:

	or	r13,r13
	je	NEAR $L$_after_reduction_355
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_355:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_7_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_356
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_356

$L$_16_blocks_overflow_356:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_356:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_357





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_357
$L$_small_initial_partial_block_357:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_357:

	or	r13,r13
	je	NEAR $L$_after_reduction_357
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_357:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_8_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_358
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_358

$L$_16_blocks_overflow_358:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_358:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_359





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_359
$L$_small_initial_partial_block_359:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_359:

	or	r13,r13
	je	NEAR $L$_after_reduction_359
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_359:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_9_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_360
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_360

$L$_16_blocks_overflow_360:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_360:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_361





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_361
$L$_small_initial_partial_block_361:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_361:

	or	r13,r13
	je	NEAR $L$_after_reduction_361
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_361:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_10_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_362
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_362

$L$_16_blocks_overflow_362:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_362:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_363





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_363
$L$_small_initial_partial_block_363:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_363:

	or	r13,r13
	je	NEAR $L$_after_reduction_363
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_363:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_11_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_364
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_364

$L$_16_blocks_overflow_364:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_364:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_365





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_365
$L$_small_initial_partial_block_365:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_365:

	or	r13,r13
	je	NEAR $L$_after_reduction_365
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_365:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_12_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_366
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_366

$L$_16_blocks_overflow_366:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_366:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_367





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_367
$L$_small_initial_partial_block_367:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_367:

	or	r13,r13
	je	NEAR $L$_after_reduction_367
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_367:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_13_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_368
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_368

$L$_16_blocks_overflow_368:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_368:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_369





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_369
$L$_small_initial_partial_block_369:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_369:

	or	r13,r13
	je	NEAR $L$_after_reduction_369
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_369:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_14_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_370
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_370

$L$_16_blocks_overflow_370:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_370:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_371





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_371
$L$_small_initial_partial_block_371:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_371:

	or	r13,r13
	je	NEAR $L$_after_reduction_371
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_371:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_15_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_372
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_372

$L$_16_blocks_overflow_372:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_372:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_373





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_373
$L$_small_initial_partial_block_373:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_373:

	or	r13,r13
	je	NEAR $L$_after_reduction_373
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_373:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_16_343:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_374
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_374

$L$_16_blocks_overflow_374:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_374:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_375:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_375:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_375:
	jmp	NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_0_343:
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_343:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_334
$L$_encrypt_32_blocks_334:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_376
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_376
$L$_16_blocks_overflow_376:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_376:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_377
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_377
$L$_16_blocks_overflow_377:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_377:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_378

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_378
	jb	NEAR $L$_last_num_blocks_is_7_1_378


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_378
	jb	NEAR $L$_last_num_blocks_is_11_9_378


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_378
	ja	NEAR $L$_last_num_blocks_is_16_378
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_378
	jmp	NEAR $L$_last_num_blocks_is_13_378

$L$_last_num_blocks_is_11_9_378:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_378
	ja	NEAR $L$_last_num_blocks_is_11_378
	jmp	NEAR $L$_last_num_blocks_is_9_378

$L$_last_num_blocks_is_7_1_378:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_378
	jb	NEAR $L$_last_num_blocks_is_3_1_378

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_378
	je	NEAR $L$_last_num_blocks_is_6_378
	jmp	NEAR $L$_last_num_blocks_is_5_378

$L$_last_num_blocks_is_3_1_378:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_378
	je	NEAR $L$_last_num_blocks_is_2_378
$L$_last_num_blocks_is_1_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_379
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_379

$L$_16_blocks_overflow_379:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_379:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_380





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_380
$L$_small_initial_partial_block_380:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_380
$L$_small_initial_compute_done_380:
$L$_after_reduction_380:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_2_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_381
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_381

$L$_16_blocks_overflow_381:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_381:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_382





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_382
$L$_small_initial_partial_block_382:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_382:

	or	r13,r13
	je	NEAR $L$_after_reduction_382
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_382:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_3_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_383
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_383

$L$_16_blocks_overflow_383:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_383:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_384





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_384
$L$_small_initial_partial_block_384:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_384:

	or	r13,r13
	je	NEAR $L$_after_reduction_384
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_384:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_4_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_385
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_385

$L$_16_blocks_overflow_385:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_385:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_386





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_386
$L$_small_initial_partial_block_386:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_386:

	or	r13,r13
	je	NEAR $L$_after_reduction_386
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_386:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_5_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_387
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_387

$L$_16_blocks_overflow_387:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_387:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_388





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_388
$L$_small_initial_partial_block_388:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_388:

	or	r13,r13
	je	NEAR $L$_after_reduction_388
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_388:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_6_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_389
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_389

$L$_16_blocks_overflow_389:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_389:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_390





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_390
$L$_small_initial_partial_block_390:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_390:

	or	r13,r13
	je	NEAR $L$_after_reduction_390
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_390:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_7_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_391
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_391

$L$_16_blocks_overflow_391:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_391:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_392





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_392
$L$_small_initial_partial_block_392:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_392:

	or	r13,r13
	je	NEAR $L$_after_reduction_392
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_392:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_8_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_393
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_393

$L$_16_blocks_overflow_393:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_393:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_394





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_394
$L$_small_initial_partial_block_394:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_394:

	or	r13,r13
	je	NEAR $L$_after_reduction_394
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_394:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_9_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_395
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_395

$L$_16_blocks_overflow_395:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_395:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_396





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_396
$L$_small_initial_partial_block_396:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_396:

	or	r13,r13
	je	NEAR $L$_after_reduction_396
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_396:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_10_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_397
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_397

$L$_16_blocks_overflow_397:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_397:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_398





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_398
$L$_small_initial_partial_block_398:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_398:

	or	r13,r13
	je	NEAR $L$_after_reduction_398
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_398:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_11_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_399
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_399

$L$_16_blocks_overflow_399:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_399:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_400





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_400
$L$_small_initial_partial_block_400:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_400:

	or	r13,r13
	je	NEAR $L$_after_reduction_400
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_400:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_12_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_401
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_401

$L$_16_blocks_overflow_401:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_401:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_402





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_402
$L$_small_initial_partial_block_402:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_402:

	or	r13,r13
	je	NEAR $L$_after_reduction_402
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_402:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_13_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_403
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_403

$L$_16_blocks_overflow_403:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_403:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_404





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_404
$L$_small_initial_partial_block_404:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_404:

	or	r13,r13
	je	NEAR $L$_after_reduction_404
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_404:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_14_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_405
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_405

$L$_16_blocks_overflow_405:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_405:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_406





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_406
$L$_small_initial_partial_block_406:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_406:

	or	r13,r13
	je	NEAR $L$_after_reduction_406
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_406:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_15_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_407
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_407

$L$_16_blocks_overflow_407:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_407:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_408





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_408
$L$_small_initial_partial_block_408:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_408:

	or	r13,r13
	je	NEAR $L$_after_reduction_408
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_408:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_16_378:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_409
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_409

$L$_16_blocks_overflow_409:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_409:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_410:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_410:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_410:
	jmp	NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_0_378:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_378:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_334
$L$_encrypt_16_blocks_334:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_411
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_411
$L$_16_blocks_overflow_411:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_411:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_412

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_412
	jb	NEAR $L$_last_num_blocks_is_7_1_412


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_412
	jb	NEAR $L$_last_num_blocks_is_11_9_412


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_412
	ja	NEAR $L$_last_num_blocks_is_16_412
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_412
	jmp	NEAR $L$_last_num_blocks_is_13_412

$L$_last_num_blocks_is_11_9_412:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_412
	ja	NEAR $L$_last_num_blocks_is_11_412
	jmp	NEAR $L$_last_num_blocks_is_9_412

$L$_last_num_blocks_is_7_1_412:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_412
	jb	NEAR $L$_last_num_blocks_is_3_1_412

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_412
	je	NEAR $L$_last_num_blocks_is_6_412
	jmp	NEAR $L$_last_num_blocks_is_5_412

$L$_last_num_blocks_is_3_1_412:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_412
	je	NEAR $L$_last_num_blocks_is_2_412
$L$_last_num_blocks_is_1_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_413
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_413

$L$_16_blocks_overflow_413:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_413:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_414





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_414
$L$_small_initial_partial_block_414:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_414
$L$_small_initial_compute_done_414:
$L$_after_reduction_414:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_2_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_415
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_415

$L$_16_blocks_overflow_415:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_415:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_416





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_416
$L$_small_initial_partial_block_416:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_416:

	or	r13,r13
	je	NEAR $L$_after_reduction_416
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_416:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_3_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_417
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_417

$L$_16_blocks_overflow_417:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_417:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_418





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_418
$L$_small_initial_partial_block_418:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_418:

	or	r13,r13
	je	NEAR $L$_after_reduction_418
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_418:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_4_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_419
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_419

$L$_16_blocks_overflow_419:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_419:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_420





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_420
$L$_small_initial_partial_block_420:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_420:

	or	r13,r13
	je	NEAR $L$_after_reduction_420
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_420:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_5_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_421
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_421

$L$_16_blocks_overflow_421:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_421:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_422





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_422
$L$_small_initial_partial_block_422:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_422:

	or	r13,r13
	je	NEAR $L$_after_reduction_422
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_422:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_6_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_423
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_423

$L$_16_blocks_overflow_423:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_423:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_424





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_424
$L$_small_initial_partial_block_424:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_424:

	or	r13,r13
	je	NEAR $L$_after_reduction_424
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_424:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_7_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_425
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_425

$L$_16_blocks_overflow_425:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_425:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_426





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_426
$L$_small_initial_partial_block_426:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_426:

	or	r13,r13
	je	NEAR $L$_after_reduction_426
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_426:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_8_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_427
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_427

$L$_16_blocks_overflow_427:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_427:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_428





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_428
$L$_small_initial_partial_block_428:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_428:

	or	r13,r13
	je	NEAR $L$_after_reduction_428
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_428:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_9_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_429
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_429

$L$_16_blocks_overflow_429:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_429:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_430





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_430
$L$_small_initial_partial_block_430:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_430:

	or	r13,r13
	je	NEAR $L$_after_reduction_430
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_430:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_10_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_431
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_431

$L$_16_blocks_overflow_431:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_431:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_432





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_432
$L$_small_initial_partial_block_432:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_432:

	or	r13,r13
	je	NEAR $L$_after_reduction_432
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_432:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_11_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_433
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_433

$L$_16_blocks_overflow_433:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_433:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_434





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_434
$L$_small_initial_partial_block_434:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_434:

	or	r13,r13
	je	NEAR $L$_after_reduction_434
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_434:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_12_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_435
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_435

$L$_16_blocks_overflow_435:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_435:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_436





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_436
$L$_small_initial_partial_block_436:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_436:

	or	r13,r13
	je	NEAR $L$_after_reduction_436
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_436:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_13_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_437
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_437

$L$_16_blocks_overflow_437:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_437:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_438





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_438
$L$_small_initial_partial_block_438:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_438:

	or	r13,r13
	je	NEAR $L$_after_reduction_438
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_438:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_14_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_439
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_439

$L$_16_blocks_overflow_439:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_439:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_440





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_440
$L$_small_initial_partial_block_440:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_440:

	or	r13,r13
	je	NEAR $L$_after_reduction_440
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_440:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_15_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_441
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_441

$L$_16_blocks_overflow_441:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_441:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_442





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_442
$L$_small_initial_partial_block_442:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_442:

	or	r13,r13
	je	NEAR $L$_after_reduction_442
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_442:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_16_412:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_443
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_443

$L$_16_blocks_overflow_443:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_443:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_444:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_444:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_444:
	jmp	NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_0_412:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_412:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_334

$L$_message_below_32_blocks_334:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_445
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_445:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_446

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_446
	jb	NEAR $L$_last_num_blocks_is_7_1_446


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_446
	jb	NEAR $L$_last_num_blocks_is_11_9_446


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_446
	ja	NEAR $L$_last_num_blocks_is_16_446
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_446
	jmp	NEAR $L$_last_num_blocks_is_13_446

$L$_last_num_blocks_is_11_9_446:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_446
	ja	NEAR $L$_last_num_blocks_is_11_446
	jmp	NEAR $L$_last_num_blocks_is_9_446

$L$_last_num_blocks_is_7_1_446:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_446
	jb	NEAR $L$_last_num_blocks_is_3_1_446

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_446
	je	NEAR $L$_last_num_blocks_is_6_446
	jmp	NEAR $L$_last_num_blocks_is_5_446

$L$_last_num_blocks_is_3_1_446:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_446
	je	NEAR $L$_last_num_blocks_is_2_446
$L$_last_num_blocks_is_1_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_447
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_447

$L$_16_blocks_overflow_447:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_447:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm17,xmm0,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_448





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_448
$L$_small_initial_partial_block_448:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_448
$L$_small_initial_compute_done_448:
$L$_after_reduction_448:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_2_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_449
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_449

$L$_16_blocks_overflow_449:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_449:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm17,ymm0,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_450





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_450
$L$_small_initial_partial_block_450:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_450:

	or	r13,r13
	je	NEAR $L$_after_reduction_450
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_450:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_3_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_451
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_451

$L$_16_blocks_overflow_451:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_451:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_452





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_452
$L$_small_initial_partial_block_452:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_452:

	or	r13,r13
	je	NEAR $L$_after_reduction_452
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_452:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_4_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_453
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_453

$L$_16_blocks_overflow_453:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_453:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm17,zmm0,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_454





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_454
$L$_small_initial_partial_block_454:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_454:

	or	r13,r13
	je	NEAR $L$_after_reduction_454
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_454:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_5_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_455
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_455

$L$_16_blocks_overflow_455:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_455:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	xmm19,xmm3,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_456





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_456
$L$_small_initial_partial_block_456:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_456:

	or	r13,r13
	je	NEAR $L$_after_reduction_456
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_456:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_6_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_457
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_457

$L$_16_blocks_overflow_457:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_457:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	ymm19,ymm3,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_458





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_458
$L$_small_initial_partial_block_458:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_458:

	or	r13,r13
	je	NEAR $L$_after_reduction_458
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_458:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_7_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_459
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_459

$L$_16_blocks_overflow_459:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_459:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_460





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_460
$L$_small_initial_partial_block_460:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_460:

	or	r13,r13
	je	NEAR $L$_after_reduction_460
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_460:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_8_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_461
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_461

$L$_16_blocks_overflow_461:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_461:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_462





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_462
$L$_small_initial_partial_block_462:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_462:

	or	r13,r13
	je	NEAR $L$_after_reduction_462
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_462:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_9_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_463
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_463

$L$_16_blocks_overflow_463:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_463:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	xmm20,xmm4,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_464





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_464
$L$_small_initial_partial_block_464:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_464:

	or	r13,r13
	je	NEAR $L$_after_reduction_464
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_464:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_10_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_465
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_465

$L$_16_blocks_overflow_465:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_465:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	ymm20,ymm4,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_466





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_466
$L$_small_initial_partial_block_466:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_466:

	or	r13,r13
	je	NEAR $L$_after_reduction_466
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_466:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_11_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_467
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_467

$L$_16_blocks_overflow_467:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_467:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_468





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_468
$L$_small_initial_partial_block_468:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_468:

	or	r13,r13
	je	NEAR $L$_after_reduction_468
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_468:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_12_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_469
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_469

$L$_16_blocks_overflow_469:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_469:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_470





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_470
$L$_small_initial_partial_block_470:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_470:

	or	r13,r13
	je	NEAR $L$_after_reduction_470
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_470:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_13_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_471
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_471

$L$_16_blocks_overflow_471:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_471:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	xmm21,xmm5,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_472





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_472
$L$_small_initial_partial_block_472:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_472:

	or	r13,r13
	je	NEAR $L$_after_reduction_472
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_472:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_14_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_473
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_473

$L$_16_blocks_overflow_473:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_473:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	ymm21,ymm5,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_474





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_474
$L$_small_initial_partial_block_474:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_474:

	or	r13,r13
	je	NEAR $L$_after_reduction_474
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_474:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_15_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_475
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_475

$L$_16_blocks_overflow_475:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_475:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_476





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_476
$L$_small_initial_partial_block_476:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_476:

	or	r13,r13
	je	NEAR $L$_after_reduction_476
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_476:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_16_446:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_477
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_477

$L$_16_blocks_overflow_477:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_477:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm17,zmm0,zmm29
	vpshufb	zmm19,zmm3,zmm29
	vpshufb	zmm20,zmm4,zmm29
	vpshufb	zmm21,zmm5,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_478:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_478:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_478:
	jmp	NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_0_446:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_446:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_334

$L$_message_below_equal_16_blocks_334:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_479
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_479


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_479
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_479


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_479
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_479
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_479
	jmp	NEAR $L$_small_initial_num_blocks_is_13_479

$L$_small_initial_num_blocks_is_11_9_479:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_479
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_479
	jmp	NEAR $L$_small_initial_num_blocks_is_9_479

$L$_small_initial_num_blocks_is_7_1_479:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_479
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_479

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_479
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_479
	jmp	NEAR $L$_small_initial_num_blocks_is_5_479

$L$_small_initial_num_blocks_is_3_1_479:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_479
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_479





$L$_small_initial_num_blocks_is_1_479:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm0,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_480





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_480
$L$_small_initial_partial_block_480:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_480
$L$_small_initial_compute_done_480:
$L$_after_reduction_480:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_2_479:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm0,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_481





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_481
$L$_small_initial_partial_block_481:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_481:

	or	r13,r13
	je	NEAR $L$_after_reduction_481
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_481:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_3_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_482





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_482
$L$_small_initial_partial_block_482:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_482:

	or	r13,r13
	je	NEAR $L$_after_reduction_482
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_482:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_4_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm0,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_483





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_483
$L$_small_initial_partial_block_483:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_483:

	or	r13,r13
	je	NEAR $L$_after_reduction_483
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_483:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_5_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	xmm7,xmm3,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_484





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_484
$L$_small_initial_partial_block_484:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_484:

	or	r13,r13
	je	NEAR $L$_after_reduction_484
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_484:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_6_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	ymm7,ymm3,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_485





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_485
$L$_small_initial_partial_block_485:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_485:

	or	r13,r13
	je	NEAR $L$_after_reduction_485
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_485:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_7_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_486





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_486
$L$_small_initial_partial_block_486:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_486:

	or	r13,r13
	je	NEAR $L$_after_reduction_486
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_486:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_8_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_487





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_487
$L$_small_initial_partial_block_487:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_487:

	or	r13,r13
	je	NEAR $L$_after_reduction_487
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_487:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_9_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	xmm10,xmm4,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_488





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_488
$L$_small_initial_partial_block_488:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_488:

	or	r13,r13
	je	NEAR $L$_after_reduction_488
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_488:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_10_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	ymm10,ymm4,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_489





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_489
$L$_small_initial_partial_block_489:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_489:

	or	r13,r13
	je	NEAR $L$_after_reduction_489
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_489:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_11_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_490





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_490
$L$_small_initial_partial_block_490:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_490:

	or	r13,r13
	je	NEAR $L$_after_reduction_490
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_490:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_12_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_491





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_491
$L$_small_initial_partial_block_491:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_491:

	or	r13,r13
	je	NEAR $L$_after_reduction_491
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_491:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_13_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	xmm11,xmm5,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_492





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_492
$L$_small_initial_partial_block_492:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_492:

	or	r13,r13
	je	NEAR $L$_after_reduction_492
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_492:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_14_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	ymm11,ymm5,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_493





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_493
$L$_small_initial_partial_block_493:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_493:

	or	r13,r13
	je	NEAR $L$_after_reduction_493
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_493:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_15_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_494





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_494
$L$_small_initial_partial_block_494:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_494:

	or	r13,r13
	je	NEAR $L$_after_reduction_494
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_494:
	jmp	NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_16_479:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm0,zmm29
	vpshufb	zmm7,zmm3,zmm29
	vpshufb	zmm10,zmm4,zmm29
	vpshufb	zmm11,zmm5,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_495:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_495:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_495:
$L$_small_initial_blocks_encrypted_479:
$L$_ghash_done_334:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_334:
	jmp	NEAR $L$exit_gcm_encrypt
$L$exit_gcm_encrypt:
	cmp	QWORD[112+rbp],256
	jbe	NEAR $L$skip_hkeys_cleanup_496
	vpxor	xmm0,xmm0,xmm0
	vmovdqa64	ZMMWORD[rsp],zmm0
	vmovdqa64	ZMMWORD[64+rsp],zmm0
	vmovdqa64	ZMMWORD[128+rsp],zmm0
	vmovdqa64	ZMMWORD[192+rsp],zmm0
	vmovdqa64	ZMMWORD[256+rsp],zmm0
	vmovdqa64	ZMMWORD[320+rsp],zmm0
	vmovdqa64	ZMMWORD[384+rsp],zmm0
	vmovdqa64	ZMMWORD[448+rsp],zmm0
	vmovdqa64	ZMMWORD[512+rsp],zmm0
	vmovdqa64	ZMMWORD[576+rsp],zmm0
	vmovdqa64	ZMMWORD[640+rsp],zmm0
	vmovdqa64	ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_496:
	vzeroupper
	vmovdqu	xmm15,XMMWORD[((-16))+rbp]
	vmovdqu	xmm14,XMMWORD[((-32))+rbp]
	vmovdqu	xmm13,XMMWORD[((-48))+rbp]
	vmovdqu	xmm12,XMMWORD[((-64))+rbp]
	vmovdqu	xmm11,XMMWORD[((-80))+rbp]
	vmovdqu	xmm10,XMMWORD[((-96))+rbp]
	vmovdqu	xmm9,XMMWORD[((-112))+rbp]
	vmovdqu	xmm8,XMMWORD[((-128))+rbp]
	vmovdqu	xmm7,XMMWORD[((-144))+rbp]
	vmovdqu	xmm6,XMMWORD[((-160))+rbp]
	lea	rsp,[8+rbp]
	pop	rsi

	pop	rdi

	pop	r15

	pop	r14

	pop	r13

	pop	r12

	pop	rbp

	pop	rbx

	DB	0F3h,0C3h		;repret
$L$encrypt_seh_end:


global	ossl_aes_gcm_decrypt_avx512

ALIGN	32
ossl_aes_gcm_decrypt_avx512:

$L$decrypt_seh_begin:
DB	243,15,30,250
	push	rbx

$L$decrypt_seh_push_rbx:
	push	rbp

$L$decrypt_seh_push_rbp:
	push	r12

$L$decrypt_seh_push_r12:
	push	r13

$L$decrypt_seh_push_r13:
	push	r14

$L$decrypt_seh_push_r14:
	push	r15

$L$decrypt_seh_push_r15:
	push	rdi
$L$decrypt_seh_push_rdi:
	push	rsi
$L$decrypt_seh_push_rsi:

	sub	rsp,168
$L$decrypt_seh_allocstack_xmm:










	lea	rbp,[160+rsp]

$L$decrypt_seh_setfp:
	vmovdqu	XMMWORD[rsp],xmm6
$L$decrypt_seh_save_xmm6:
	vmovdqu	XMMWORD[16+rsp],xmm7
$L$decrypt_seh_save_xmm7:
	vmovdqu	XMMWORD[32+rsp],xmm8
$L$decrypt_seh_save_xmm8:
	vmovdqu	XMMWORD[48+rsp],xmm9
$L$decrypt_seh_save_xmm9:
	vmovdqu	XMMWORD[64+rsp],xmm10
$L$decrypt_seh_save_xmm10:
	vmovdqu	XMMWORD[80+rsp],xmm11
$L$decrypt_seh_save_xmm11:
	vmovdqu	XMMWORD[96+rsp],xmm12
$L$decrypt_seh_save_xmm12:
	vmovdqu	XMMWORD[112+rsp],xmm13
$L$decrypt_seh_save_xmm13:
	vmovdqu	XMMWORD[128+rsp],xmm14
$L$decrypt_seh_save_xmm14:
	vmovdqu	XMMWORD[144+rsp],xmm15
$L$decrypt_seh_save_xmm15:

$L$decrypt_seh_prolog_end:
	sub	rsp,1584
	and	rsp,(-64)


	mov	eax,DWORD[240+rcx]
	cmp	eax,9
	je	NEAR $L$aes_gcm_decrypt_128_avx512
	cmp	eax,11
	je	NEAR $L$aes_gcm_decrypt_192_avx512
	cmp	eax,13
	je	NEAR $L$aes_gcm_decrypt_256_avx512
	xor	eax,eax
	jmp	NEAR $L$exit_gcm_decrypt
ALIGN	32
$L$aes_gcm_decrypt_128_avx512:
	cmp	QWORD[112+rbp],0
	je	NEAR $L$_enc_dec_done_497
	xor	r14,r14
	vmovdqu64	xmm14,XMMWORD[64+rdx]

	mov	r11,QWORD[r8]
	or	r11,r11
	je	NEAR $L$_partial_block_done_498
	mov	r10d,16
	lea	r12,[byte_len_to_mask_table]
	cmp	QWORD[112+rbp],r10
	cmovc	r10,QWORD[112+rbp]
	add	r12,r10
	add	r12,r10
	kmovw	k1,[r12]
	vmovdqu8	xmm0{k1}{z},[r9]

	vmovdqu64	xmm3,XMMWORD[16+rdx]
	vmovdqu64	xmm4,XMMWORD[336+rdx]



	lea	r12,[SHIFT_MASK]
	add	r12,r11
	vmovdqu64	xmm5,XMMWORD[r12]
	vpshufb	xmm3,xmm3,xmm5

	vmovdqa64	xmm6,xmm0
	vpxorq	xmm3,xmm3,xmm0


	mov	r13,QWORD[112+rbp]
	add	r13,r11
	sub	r13,16
	jge	NEAR $L$_no_extra_mask_498
	sub	r12,r13
$L$_no_extra_mask_498:



	vmovdqu64	xmm0,XMMWORD[16+r12]
	vpand	xmm3,xmm3,xmm0
	vpand	xmm6,xmm6,xmm0
	vpshufb	xmm6,xmm6,XMMWORD[SHUF_MASK]
	vpshufb	xmm6,xmm6,xmm5
	vpxorq	xmm14,xmm14,xmm6
	cmp	r13,0
	jl	NEAR $L$_partial_incomplete_498

	vpclmulqdq	xmm7,xmm14,xmm4,0x11
	vpclmulqdq	xmm10,xmm14,xmm4,0x00
	vpclmulqdq	xmm11,xmm14,xmm4,0x01
	vpclmulqdq	xmm14,xmm14,xmm4,0x10
	vpxorq	xmm14,xmm14,xmm11

	vpsrldq	xmm11,xmm14,8
	vpslldq	xmm14,xmm14,8
	vpxorq	xmm7,xmm7,xmm11
	vpxorq	xmm14,xmm14,xmm10



	vmovdqu64	xmm11,XMMWORD[POLY2]

	vpclmulqdq	xmm10,xmm11,xmm14,0x01
	vpslldq	xmm10,xmm10,8
	vpxorq	xmm14,xmm14,xmm10



	vpclmulqdq	xmm10,xmm11,xmm14,0x00
	vpsrldq	xmm10,xmm10,4
	vpclmulqdq	xmm14,xmm11,xmm14,0x10
	vpslldq	xmm14,xmm14,4

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

	mov	r12,r11
	mov	r11,16
	sub	r11,r12
	jmp	NEAR $L$_enc_dec_done_498

$L$_partial_incomplete_498:
	mov	r12,QWORD[112+rbp]
	add	QWORD[r8],r12
	mov	r11,QWORD[112+rbp]

$L$_enc_dec_done_498:


	lea	r12,[byte_len_to_mask_table]
	kmovw	k1,[r11*2+r12]
	vmovdqu64	XMMWORD[64+rdx],xmm14
	mov	r12,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_498:
	vmovdqu64	xmm2,XMMWORD[rdx]
	mov	r13,QWORD[112+rbp]
	sub	r13,r11
	je	NEAR $L$_enc_dec_done_497
	cmp	r13,256
	jbe	NEAR $L$_message_below_equal_16_blocks_497

	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vmovdqa64	zmm27,ZMMWORD[ddq_addbe_4444]
	vmovdqa64	zmm28,ZMMWORD[ddq_addbe_1234]






	vmovd	r15d,xmm2
	and	r15d,255

	vshufi64x2	zmm2,zmm2,zmm2,0
	vpshufb	zmm2,zmm2,zmm29



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_499
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_499
$L$_next_16_overflow_499:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_499:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[192+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm7
	vmovdqa64	ZMMWORD[832+rsp],zmm10
	vmovdqa64	ZMMWORD[896+rsp],zmm11
	vmovdqa64	ZMMWORD[960+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_500

	vmovdqu64	zmm0,ZMMWORD[288+rdx]
	vmovdqu64	ZMMWORD[704+rsp],zmm0

	vmovdqu64	zmm3,ZMMWORD[224+rdx]
	vmovdqu64	ZMMWORD[640+rsp],zmm3


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[160+rdx]
	vmovdqu64	ZMMWORD[576+rsp],zmm4

	vmovdqu64	zmm5,ZMMWORD[96+rdx]
	vmovdqu64	ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_500:
	cmp	r13,512
	jb	NEAR $L$_message_below_32_blocks_497



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_501
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_501
$L$_next_16_overflow_501:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_501:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[448+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm7
	vmovdqa64	ZMMWORD[1088+rsp],zmm10
	vmovdqa64	ZMMWORD[1152+rsp],zmm11
	vmovdqa64	ZMMWORD[1216+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_502
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_502:
	mov	r14,1
	add	r11,512
	sub	r13,512

	cmp	r13,768
	jb	NEAR $L$_no_more_big_nblocks_497
$L$_encrypt_big_nblocks_497:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_503
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_503
$L$_16_blocks_overflow_503:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_503:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_504
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_504
$L$_16_blocks_overflow_504:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_504:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_505
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_505
$L$_16_blocks_overflow_505:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_505:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[512+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[576+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[640+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[704+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]


	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96

	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpternlogq	zmm6,zmm12,zmm15,0x96
	vpxorq	zmm6,zmm6,zmm24
	vpternlogq	zmm7,zmm13,zmm10,0x96
	vpxorq	zmm7,zmm7,zmm25
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vextracti64x4	ymm12,zmm6,1
	vpxorq	ymm6,ymm6,ymm12
	vextracti32x4	xmm12,ymm6,1
	vpxorq	xmm6,xmm6,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm6,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[512+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[576+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[640+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[704+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm0
	vmovdqa64	ZMMWORD[1088+rsp],zmm3
	vmovdqa64	ZMMWORD[1152+rsp],zmm4
	vmovdqa64	ZMMWORD[1216+rsp],zmm5
	vmovdqa64	zmm14,zmm6

	add	r11,768
	sub	r13,768
	cmp	r13,768
	jae	NEAR $L$_encrypt_big_nblocks_497

$L$_no_more_big_nblocks_497:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_497

	cmp	r13,256
	jae	NEAR $L$_encrypt_16_blocks_497
$L$_encrypt_0_blocks_ghash_32_497:
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,256
	sub	ebx,r10d
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	add	ebx,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_506

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_506
	jb	NEAR $L$_last_num_blocks_is_7_1_506


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_506
	jb	NEAR $L$_last_num_blocks_is_11_9_506


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_506
	ja	NEAR $L$_last_num_blocks_is_16_506
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_506
	jmp	NEAR $L$_last_num_blocks_is_13_506

$L$_last_num_blocks_is_11_9_506:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_506
	ja	NEAR $L$_last_num_blocks_is_11_506
	jmp	NEAR $L$_last_num_blocks_is_9_506

$L$_last_num_blocks_is_7_1_506:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_506
	jb	NEAR $L$_last_num_blocks_is_3_1_506

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_506
	je	NEAR $L$_last_num_blocks_is_6_506
	jmp	NEAR $L$_last_num_blocks_is_5_506

$L$_last_num_blocks_is_3_1_506:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_506
	je	NEAR $L$_last_num_blocks_is_2_506
$L$_last_num_blocks_is_1_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_507
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_507

$L$_16_blocks_overflow_507:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_507:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_508





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_508
$L$_small_initial_partial_block_508:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_508
$L$_small_initial_compute_done_508:
$L$_after_reduction_508:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_2_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_509
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_509

$L$_16_blocks_overflow_509:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_509:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_510





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_510
$L$_small_initial_partial_block_510:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_510:

	or	r13,r13
	je	NEAR $L$_after_reduction_510
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_510:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_3_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_511
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_511

$L$_16_blocks_overflow_511:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_511:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_512





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_512
$L$_small_initial_partial_block_512:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_512:

	or	r13,r13
	je	NEAR $L$_after_reduction_512
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_512:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_4_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_513
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_513

$L$_16_blocks_overflow_513:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_513:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_514





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_514
$L$_small_initial_partial_block_514:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_514:

	or	r13,r13
	je	NEAR $L$_after_reduction_514
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_514:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_5_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_515
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_515

$L$_16_blocks_overflow_515:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_515:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_516





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_516
$L$_small_initial_partial_block_516:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_516:

	or	r13,r13
	je	NEAR $L$_after_reduction_516
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_516:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_6_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_517
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_517

$L$_16_blocks_overflow_517:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_517:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_518





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_518
$L$_small_initial_partial_block_518:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_518:

	or	r13,r13
	je	NEAR $L$_after_reduction_518
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_518:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_7_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_519
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_519

$L$_16_blocks_overflow_519:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_519:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_520





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_520
$L$_small_initial_partial_block_520:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_520:

	or	r13,r13
	je	NEAR $L$_after_reduction_520
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_520:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_8_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_521
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_521

$L$_16_blocks_overflow_521:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_521:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_522





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_522
$L$_small_initial_partial_block_522:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_522:

	or	r13,r13
	je	NEAR $L$_after_reduction_522
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_522:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_9_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_523
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_523

$L$_16_blocks_overflow_523:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_523:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_524





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_524
$L$_small_initial_partial_block_524:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_524:

	or	r13,r13
	je	NEAR $L$_after_reduction_524
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_524:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_10_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_525
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_525

$L$_16_blocks_overflow_525:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_525:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_526





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_526
$L$_small_initial_partial_block_526:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_526:

	or	r13,r13
	je	NEAR $L$_after_reduction_526
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_526:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_11_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_527
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_527

$L$_16_blocks_overflow_527:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_527:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_528





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_528
$L$_small_initial_partial_block_528:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_528:

	or	r13,r13
	je	NEAR $L$_after_reduction_528
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_528:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_12_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_529
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_529

$L$_16_blocks_overflow_529:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_529:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_530





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_530
$L$_small_initial_partial_block_530:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_530:

	or	r13,r13
	je	NEAR $L$_after_reduction_530
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_530:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_13_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_531
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_531

$L$_16_blocks_overflow_531:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_531:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_532





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_532
$L$_small_initial_partial_block_532:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_532:

	or	r13,r13
	je	NEAR $L$_after_reduction_532
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_532:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_14_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_533
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_533

$L$_16_blocks_overflow_533:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_533:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_534





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_534
$L$_small_initial_partial_block_534:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_534:

	or	r13,r13
	je	NEAR $L$_after_reduction_534
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_534:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_15_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_535
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_535

$L$_16_blocks_overflow_535:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_535:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_536





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_536
$L$_small_initial_partial_block_536:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_536:

	or	r13,r13
	je	NEAR $L$_after_reduction_536
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_536:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_16_506:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_537
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_537

$L$_16_blocks_overflow_537:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_537:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_538:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_538:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_538:
	jmp	NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_0_506:
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_506:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_497
$L$_encrypt_32_blocks_497:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_539
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_539
$L$_16_blocks_overflow_539:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_539:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_540
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_540
$L$_16_blocks_overflow_540:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_540:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_541

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_541
	jb	NEAR $L$_last_num_blocks_is_7_1_541


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_541
	jb	NEAR $L$_last_num_blocks_is_11_9_541


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_541
	ja	NEAR $L$_last_num_blocks_is_16_541
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_541
	jmp	NEAR $L$_last_num_blocks_is_13_541

$L$_last_num_blocks_is_11_9_541:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_541
	ja	NEAR $L$_last_num_blocks_is_11_541
	jmp	NEAR $L$_last_num_blocks_is_9_541

$L$_last_num_blocks_is_7_1_541:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_541
	jb	NEAR $L$_last_num_blocks_is_3_1_541

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_541
	je	NEAR $L$_last_num_blocks_is_6_541
	jmp	NEAR $L$_last_num_blocks_is_5_541

$L$_last_num_blocks_is_3_1_541:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_541
	je	NEAR $L$_last_num_blocks_is_2_541
$L$_last_num_blocks_is_1_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_542
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_542

$L$_16_blocks_overflow_542:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_542:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_543





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_543
$L$_small_initial_partial_block_543:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_543
$L$_small_initial_compute_done_543:
$L$_after_reduction_543:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_2_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_544
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_544

$L$_16_blocks_overflow_544:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_544:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_545





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_545
$L$_small_initial_partial_block_545:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_545:

	or	r13,r13
	je	NEAR $L$_after_reduction_545
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_545:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_3_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_546
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_546

$L$_16_blocks_overflow_546:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_546:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_547





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_547
$L$_small_initial_partial_block_547:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_547:

	or	r13,r13
	je	NEAR $L$_after_reduction_547
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_547:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_4_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_548
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_548

$L$_16_blocks_overflow_548:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_548:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_549





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_549
$L$_small_initial_partial_block_549:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_549:

	or	r13,r13
	je	NEAR $L$_after_reduction_549
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_549:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_5_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_550
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_550

$L$_16_blocks_overflow_550:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_550:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_551





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_551
$L$_small_initial_partial_block_551:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_551:

	or	r13,r13
	je	NEAR $L$_after_reduction_551
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_551:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_6_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_552
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_552

$L$_16_blocks_overflow_552:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_552:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_553





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_553
$L$_small_initial_partial_block_553:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_553:

	or	r13,r13
	je	NEAR $L$_after_reduction_553
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_553:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_7_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_554
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_554

$L$_16_blocks_overflow_554:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_554:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_555





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_555
$L$_small_initial_partial_block_555:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_555:

	or	r13,r13
	je	NEAR $L$_after_reduction_555
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_555:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_8_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_556
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_556

$L$_16_blocks_overflow_556:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_556:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_557





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_557
$L$_small_initial_partial_block_557:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_557:

	or	r13,r13
	je	NEAR $L$_after_reduction_557
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_557:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_9_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_558
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_558

$L$_16_blocks_overflow_558:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_558:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_559





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_559
$L$_small_initial_partial_block_559:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_559:

	or	r13,r13
	je	NEAR $L$_after_reduction_559
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_559:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_10_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_560
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_560

$L$_16_blocks_overflow_560:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_560:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_561





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_561
$L$_small_initial_partial_block_561:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_561:

	or	r13,r13
	je	NEAR $L$_after_reduction_561
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_561:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_11_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_562
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_562

$L$_16_blocks_overflow_562:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_562:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_563





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_563
$L$_small_initial_partial_block_563:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_563:

	or	r13,r13
	je	NEAR $L$_after_reduction_563
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_563:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_12_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_564
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_564

$L$_16_blocks_overflow_564:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_564:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_565





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_565
$L$_small_initial_partial_block_565:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_565:

	or	r13,r13
	je	NEAR $L$_after_reduction_565
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_565:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_13_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_566
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_566

$L$_16_blocks_overflow_566:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_566:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_567





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_567
$L$_small_initial_partial_block_567:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_567:

	or	r13,r13
	je	NEAR $L$_after_reduction_567
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_567:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_14_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_568
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_568

$L$_16_blocks_overflow_568:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_568:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_569





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_569
$L$_small_initial_partial_block_569:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_569:

	or	r13,r13
	je	NEAR $L$_after_reduction_569
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_569:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_15_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_570
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_570

$L$_16_blocks_overflow_570:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_570:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_571





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_571
$L$_small_initial_partial_block_571:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_571:

	or	r13,r13
	je	NEAR $L$_after_reduction_571
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_571:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_16_541:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_572
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_572

$L$_16_blocks_overflow_572:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_572:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_573:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_573:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_573:
	jmp	NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_0_541:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_541:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_497
$L$_encrypt_16_blocks_497:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_574
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_574
$L$_16_blocks_overflow_574:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_574:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_575

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_575
	jb	NEAR $L$_last_num_blocks_is_7_1_575


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_575
	jb	NEAR $L$_last_num_blocks_is_11_9_575


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_575
	ja	NEAR $L$_last_num_blocks_is_16_575
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_575
	jmp	NEAR $L$_last_num_blocks_is_13_575

$L$_last_num_blocks_is_11_9_575:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_575
	ja	NEAR $L$_last_num_blocks_is_11_575
	jmp	NEAR $L$_last_num_blocks_is_9_575

$L$_last_num_blocks_is_7_1_575:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_575
	jb	NEAR $L$_last_num_blocks_is_3_1_575

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_575
	je	NEAR $L$_last_num_blocks_is_6_575
	jmp	NEAR $L$_last_num_blocks_is_5_575

$L$_last_num_blocks_is_3_1_575:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_575
	je	NEAR $L$_last_num_blocks_is_2_575
$L$_last_num_blocks_is_1_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_576
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_576

$L$_16_blocks_overflow_576:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_576:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_577





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_577
$L$_small_initial_partial_block_577:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_577
$L$_small_initial_compute_done_577:
$L$_after_reduction_577:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_2_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_578
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_578

$L$_16_blocks_overflow_578:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_578:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_579





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_579
$L$_small_initial_partial_block_579:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_579:

	or	r13,r13
	je	NEAR $L$_after_reduction_579
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_579:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_3_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_580
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_580

$L$_16_blocks_overflow_580:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_580:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_581





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_581
$L$_small_initial_partial_block_581:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_581:

	or	r13,r13
	je	NEAR $L$_after_reduction_581
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_581:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_4_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_582
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_582

$L$_16_blocks_overflow_582:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_582:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_583





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_583
$L$_small_initial_partial_block_583:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_583:

	or	r13,r13
	je	NEAR $L$_after_reduction_583
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_583:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_5_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_584
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_584

$L$_16_blocks_overflow_584:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_584:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_585





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_585
$L$_small_initial_partial_block_585:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_585:

	or	r13,r13
	je	NEAR $L$_after_reduction_585
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_585:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_6_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_586
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_586

$L$_16_blocks_overflow_586:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_586:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_587





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_587
$L$_small_initial_partial_block_587:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_587:

	or	r13,r13
	je	NEAR $L$_after_reduction_587
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_587:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_7_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_588
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_588

$L$_16_blocks_overflow_588:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_588:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_589





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_589
$L$_small_initial_partial_block_589:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_589:

	or	r13,r13
	je	NEAR $L$_after_reduction_589
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_589:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_8_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_590
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_590

$L$_16_blocks_overflow_590:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_590:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_591





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_591
$L$_small_initial_partial_block_591:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_591:

	or	r13,r13
	je	NEAR $L$_after_reduction_591
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_591:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_9_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_592
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_592

$L$_16_blocks_overflow_592:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_592:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_593





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_593
$L$_small_initial_partial_block_593:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_593:

	or	r13,r13
	je	NEAR $L$_after_reduction_593
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_593:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_10_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_594
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_594

$L$_16_blocks_overflow_594:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_594:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_595





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_595
$L$_small_initial_partial_block_595:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_595:

	or	r13,r13
	je	NEAR $L$_after_reduction_595
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_595:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_11_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_596
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_596

$L$_16_blocks_overflow_596:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_596:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_597





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_597
$L$_small_initial_partial_block_597:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_597:

	or	r13,r13
	je	NEAR $L$_after_reduction_597
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_597:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_12_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_598
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_598

$L$_16_blocks_overflow_598:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_598:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_599





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_599
$L$_small_initial_partial_block_599:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_599:

	or	r13,r13
	je	NEAR $L$_after_reduction_599
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_599:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_13_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_600
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_600

$L$_16_blocks_overflow_600:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_600:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_601





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_601
$L$_small_initial_partial_block_601:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_601:

	or	r13,r13
	je	NEAR $L$_after_reduction_601
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_601:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_14_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_602
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_602

$L$_16_blocks_overflow_602:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_602:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_603





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_603
$L$_small_initial_partial_block_603:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_603:

	or	r13,r13
	je	NEAR $L$_after_reduction_603
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_603:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_15_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_604
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_604

$L$_16_blocks_overflow_604:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_604:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_605





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_605
$L$_small_initial_partial_block_605:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_605:

	or	r13,r13
	je	NEAR $L$_after_reduction_605
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_605:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_16_575:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_606
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_606

$L$_16_blocks_overflow_606:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_606:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_607:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_607:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_607:
	jmp	NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_0_575:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_575:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_497

$L$_message_below_32_blocks_497:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_608
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_608:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_609

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_609
	jb	NEAR $L$_last_num_blocks_is_7_1_609


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_609
	jb	NEAR $L$_last_num_blocks_is_11_9_609


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_609
	ja	NEAR $L$_last_num_blocks_is_16_609
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_609
	jmp	NEAR $L$_last_num_blocks_is_13_609

$L$_last_num_blocks_is_11_9_609:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_609
	ja	NEAR $L$_last_num_blocks_is_11_609
	jmp	NEAR $L$_last_num_blocks_is_9_609

$L$_last_num_blocks_is_7_1_609:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_609
	jb	NEAR $L$_last_num_blocks_is_3_1_609

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_609
	je	NEAR $L$_last_num_blocks_is_6_609
	jmp	NEAR $L$_last_num_blocks_is_5_609

$L$_last_num_blocks_is_3_1_609:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_609
	je	NEAR $L$_last_num_blocks_is_2_609
$L$_last_num_blocks_is_1_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_610
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_610

$L$_16_blocks_overflow_610:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_610:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_611





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_611
$L$_small_initial_partial_block_611:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_611
$L$_small_initial_compute_done_611:
$L$_after_reduction_611:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_2_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_612
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_612

$L$_16_blocks_overflow_612:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_612:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_613





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_613
$L$_small_initial_partial_block_613:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_613:

	or	r13,r13
	je	NEAR $L$_after_reduction_613
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_613:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_3_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_614
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_614

$L$_16_blocks_overflow_614:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_614:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_615





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_615
$L$_small_initial_partial_block_615:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_615:

	or	r13,r13
	je	NEAR $L$_after_reduction_615
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_615:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_4_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_616
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_616

$L$_16_blocks_overflow_616:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_616:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_617





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_617
$L$_small_initial_partial_block_617:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_617:

	or	r13,r13
	je	NEAR $L$_after_reduction_617
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_617:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_5_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_618
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_618

$L$_16_blocks_overflow_618:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_618:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_619





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_619
$L$_small_initial_partial_block_619:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_619:

	or	r13,r13
	je	NEAR $L$_after_reduction_619
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_619:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_6_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_620
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_620

$L$_16_blocks_overflow_620:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_620:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_621





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_621
$L$_small_initial_partial_block_621:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_621:

	or	r13,r13
	je	NEAR $L$_after_reduction_621
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_621:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_7_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_622
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_622

$L$_16_blocks_overflow_622:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_622:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_623





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_623
$L$_small_initial_partial_block_623:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_623:

	or	r13,r13
	je	NEAR $L$_after_reduction_623
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_623:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_8_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_624
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_624

$L$_16_blocks_overflow_624:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_624:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_625





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_625
$L$_small_initial_partial_block_625:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_625:

	or	r13,r13
	je	NEAR $L$_after_reduction_625
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_625:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_9_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_626
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_626

$L$_16_blocks_overflow_626:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_626:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_627





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_627
$L$_small_initial_partial_block_627:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_627:

	or	r13,r13
	je	NEAR $L$_after_reduction_627
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_627:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_10_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_628
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_628

$L$_16_blocks_overflow_628:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_628:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_629





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_629
$L$_small_initial_partial_block_629:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_629:

	or	r13,r13
	je	NEAR $L$_after_reduction_629
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_629:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_11_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_630
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_630

$L$_16_blocks_overflow_630:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_630:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_631





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_631
$L$_small_initial_partial_block_631:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_631:

	or	r13,r13
	je	NEAR $L$_after_reduction_631
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_631:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_12_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_632
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_632

$L$_16_blocks_overflow_632:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_632:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_633





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_633
$L$_small_initial_partial_block_633:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_633:

	or	r13,r13
	je	NEAR $L$_after_reduction_633
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_633:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_13_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_634
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_634

$L$_16_blocks_overflow_634:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_634:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_635





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_635
$L$_small_initial_partial_block_635:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_635:

	or	r13,r13
	je	NEAR $L$_after_reduction_635
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_635:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_14_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_636
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_636

$L$_16_blocks_overflow_636:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_636:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_637





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_637
$L$_small_initial_partial_block_637:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_637:

	or	r13,r13
	je	NEAR $L$_after_reduction_637
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_637:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_15_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_638
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_638

$L$_16_blocks_overflow_638:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_638:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_639





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_639
$L$_small_initial_partial_block_639:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_639:

	or	r13,r13
	je	NEAR $L$_after_reduction_639
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_639:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_16_609:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_640
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_640

$L$_16_blocks_overflow_640:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_640:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_641:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_641:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_641:
	jmp	NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_0_609:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_609:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_497

$L$_message_below_equal_16_blocks_497:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_642
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_642


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_642
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_642


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_642
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_642
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_642
	jmp	NEAR $L$_small_initial_num_blocks_is_13_642

$L$_small_initial_num_blocks_is_11_9_642:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_642
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_642
	jmp	NEAR $L$_small_initial_num_blocks_is_9_642

$L$_small_initial_num_blocks_is_7_1_642:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_642
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_642

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_642
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_642
	jmp	NEAR $L$_small_initial_num_blocks_is_5_642

$L$_small_initial_num_blocks_is_3_1_642:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_642
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_642





$L$_small_initial_num_blocks_is_1_642:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm6,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_643





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_643
$L$_small_initial_partial_block_643:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_643
$L$_small_initial_compute_done_643:
$L$_after_reduction_643:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_2_642:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm6,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_644





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_644
$L$_small_initial_partial_block_644:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_644:

	or	r13,r13
	je	NEAR $L$_after_reduction_644
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_644:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_3_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_645





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_645
$L$_small_initial_partial_block_645:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_645:

	or	r13,r13
	je	NEAR $L$_after_reduction_645
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_645:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_4_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_646





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_646
$L$_small_initial_partial_block_646:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_646:

	or	r13,r13
	je	NEAR $L$_after_reduction_646
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_646:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_5_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	xmm7,xmm7,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_647





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_647
$L$_small_initial_partial_block_647:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_647:

	or	r13,r13
	je	NEAR $L$_after_reduction_647
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_647:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_6_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	ymm7,ymm7,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_648





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_648
$L$_small_initial_partial_block_648:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_648:

	or	r13,r13
	je	NEAR $L$_after_reduction_648
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_648:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_7_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_649





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_649
$L$_small_initial_partial_block_649:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_649:

	or	r13,r13
	je	NEAR $L$_after_reduction_649
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_649:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_8_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_650





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_650
$L$_small_initial_partial_block_650:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_650:

	or	r13,r13
	je	NEAR $L$_after_reduction_650
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_650:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_9_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	xmm10,xmm10,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_651





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_651
$L$_small_initial_partial_block_651:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_651:

	or	r13,r13
	je	NEAR $L$_after_reduction_651
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_651:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_10_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	ymm10,ymm10,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_652





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_652
$L$_small_initial_partial_block_652:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_652:

	or	r13,r13
	je	NEAR $L$_after_reduction_652
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_652:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_11_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_653





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_653
$L$_small_initial_partial_block_653:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_653:

	or	r13,r13
	je	NEAR $L$_after_reduction_653
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_653:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_12_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_654





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_654
$L$_small_initial_partial_block_654:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_654:

	or	r13,r13
	je	NEAR $L$_after_reduction_654
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_654:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_13_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	xmm11,xmm11,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_655





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_655
$L$_small_initial_partial_block_655:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_655:

	or	r13,r13
	je	NEAR $L$_after_reduction_655
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_655:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_14_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	ymm11,ymm11,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_656





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_656
$L$_small_initial_partial_block_656:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_656:

	or	r13,r13
	je	NEAR $L$_after_reduction_656
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_656:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_15_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_657





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_657
$L$_small_initial_partial_block_657:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_657:

	or	r13,r13
	je	NEAR $L$_after_reduction_657
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_657:
	jmp	NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_16_642:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_658:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_658:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_658:
$L$_small_initial_blocks_encrypted_642:
$L$_ghash_done_497:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_497:
	jmp	NEAR $L$exit_gcm_decrypt
ALIGN	32
$L$aes_gcm_decrypt_192_avx512:
	cmp	QWORD[112+rbp],0
	je	NEAR $L$_enc_dec_done_659
	xor	r14,r14
	vmovdqu64	xmm14,XMMWORD[64+rdx]

	mov	r11,QWORD[r8]
	or	r11,r11
	je	NEAR $L$_partial_block_done_660
	mov	r10d,16
	lea	r12,[byte_len_to_mask_table]
	cmp	QWORD[112+rbp],r10
	cmovc	r10,QWORD[112+rbp]
	add	r12,r10
	add	r12,r10
	kmovw	k1,[r12]
	vmovdqu8	xmm0{k1}{z},[r9]

	vmovdqu64	xmm3,XMMWORD[16+rdx]
	vmovdqu64	xmm4,XMMWORD[336+rdx]



	lea	r12,[SHIFT_MASK]
	add	r12,r11
	vmovdqu64	xmm5,XMMWORD[r12]
	vpshufb	xmm3,xmm3,xmm5

	vmovdqa64	xmm6,xmm0
	vpxorq	xmm3,xmm3,xmm0


	mov	r13,QWORD[112+rbp]
	add	r13,r11
	sub	r13,16
	jge	NEAR $L$_no_extra_mask_660
	sub	r12,r13
$L$_no_extra_mask_660:



	vmovdqu64	xmm0,XMMWORD[16+r12]
	vpand	xmm3,xmm3,xmm0
	vpand	xmm6,xmm6,xmm0
	vpshufb	xmm6,xmm6,XMMWORD[SHUF_MASK]
	vpshufb	xmm6,xmm6,xmm5
	vpxorq	xmm14,xmm14,xmm6
	cmp	r13,0
	jl	NEAR $L$_partial_incomplete_660

	vpclmulqdq	xmm7,xmm14,xmm4,0x11
	vpclmulqdq	xmm10,xmm14,xmm4,0x00
	vpclmulqdq	xmm11,xmm14,xmm4,0x01
	vpclmulqdq	xmm14,xmm14,xmm4,0x10
	vpxorq	xmm14,xmm14,xmm11

	vpsrldq	xmm11,xmm14,8
	vpslldq	xmm14,xmm14,8
	vpxorq	xmm7,xmm7,xmm11
	vpxorq	xmm14,xmm14,xmm10



	vmovdqu64	xmm11,XMMWORD[POLY2]

	vpclmulqdq	xmm10,xmm11,xmm14,0x01
	vpslldq	xmm10,xmm10,8
	vpxorq	xmm14,xmm14,xmm10



	vpclmulqdq	xmm10,xmm11,xmm14,0x00
	vpsrldq	xmm10,xmm10,4
	vpclmulqdq	xmm14,xmm11,xmm14,0x10
	vpslldq	xmm14,xmm14,4

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

	mov	r12,r11
	mov	r11,16
	sub	r11,r12
	jmp	NEAR $L$_enc_dec_done_660

$L$_partial_incomplete_660:
	mov	r12,QWORD[112+rbp]
	add	QWORD[r8],r12
	mov	r11,QWORD[112+rbp]

$L$_enc_dec_done_660:


	lea	r12,[byte_len_to_mask_table]
	kmovw	k1,[r11*2+r12]
	vmovdqu64	XMMWORD[64+rdx],xmm14
	mov	r12,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_660:
	vmovdqu64	xmm2,XMMWORD[rdx]
	mov	r13,QWORD[112+rbp]
	sub	r13,r11
	je	NEAR $L$_enc_dec_done_659
	cmp	r13,256
	jbe	NEAR $L$_message_below_equal_16_blocks_659

	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vmovdqa64	zmm27,ZMMWORD[ddq_addbe_4444]
	vmovdqa64	zmm28,ZMMWORD[ddq_addbe_1234]






	vmovd	r15d,xmm2
	and	r15d,255

	vshufi64x2	zmm2,zmm2,zmm2,0
	vpshufb	zmm2,zmm2,zmm29



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_661
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_661
$L$_next_16_overflow_661:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_661:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[192+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm7
	vmovdqa64	ZMMWORD[832+rsp],zmm10
	vmovdqa64	ZMMWORD[896+rsp],zmm11
	vmovdqa64	ZMMWORD[960+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_662

	vmovdqu64	zmm0,ZMMWORD[288+rdx]
	vmovdqu64	ZMMWORD[704+rsp],zmm0

	vmovdqu64	zmm3,ZMMWORD[224+rdx]
	vmovdqu64	ZMMWORD[640+rsp],zmm3


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[160+rdx]
	vmovdqu64	ZMMWORD[576+rsp],zmm4

	vmovdqu64	zmm5,ZMMWORD[96+rdx]
	vmovdqu64	ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_662:
	cmp	r13,512
	jb	NEAR $L$_message_below_32_blocks_659



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_663
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_663
$L$_next_16_overflow_663:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_663:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[448+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm7
	vmovdqa64	ZMMWORD[1088+rsp],zmm10
	vmovdqa64	ZMMWORD[1152+rsp],zmm11
	vmovdqa64	ZMMWORD[1216+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_664
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_664:
	mov	r14,1
	add	r11,512
	sub	r13,512

	cmp	r13,768
	jb	NEAR $L$_no_more_big_nblocks_659
$L$_encrypt_big_nblocks_659:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_665
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_665
$L$_16_blocks_overflow_665:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_665:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_666
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_666
$L$_16_blocks_overflow_666:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_666:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_667
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_667
$L$_16_blocks_overflow_667:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_667:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[512+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[576+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[640+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[704+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]


	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96

	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpternlogq	zmm6,zmm12,zmm15,0x96
	vpxorq	zmm6,zmm6,zmm24
	vpternlogq	zmm7,zmm13,zmm10,0x96
	vpxorq	zmm7,zmm7,zmm25
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vextracti64x4	ymm12,zmm6,1
	vpxorq	ymm6,ymm6,ymm12
	vextracti32x4	xmm12,ymm6,1
	vpxorq	xmm6,xmm6,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm6,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[512+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[576+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[640+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[704+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm0
	vmovdqa64	ZMMWORD[1088+rsp],zmm3
	vmovdqa64	ZMMWORD[1152+rsp],zmm4
	vmovdqa64	ZMMWORD[1216+rsp],zmm5
	vmovdqa64	zmm14,zmm6

	add	r11,768
	sub	r13,768
	cmp	r13,768
	jae	NEAR $L$_encrypt_big_nblocks_659

$L$_no_more_big_nblocks_659:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_659

	cmp	r13,256
	jae	NEAR $L$_encrypt_16_blocks_659
$L$_encrypt_0_blocks_ghash_32_659:
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,256
	sub	ebx,r10d
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	add	ebx,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_668

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_668
	jb	NEAR $L$_last_num_blocks_is_7_1_668


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_668
	jb	NEAR $L$_last_num_blocks_is_11_9_668


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_668
	ja	NEAR $L$_last_num_blocks_is_16_668
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_668
	jmp	NEAR $L$_last_num_blocks_is_13_668

$L$_last_num_blocks_is_11_9_668:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_668
	ja	NEAR $L$_last_num_blocks_is_11_668
	jmp	NEAR $L$_last_num_blocks_is_9_668

$L$_last_num_blocks_is_7_1_668:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_668
	jb	NEAR $L$_last_num_blocks_is_3_1_668

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_668
	je	NEAR $L$_last_num_blocks_is_6_668
	jmp	NEAR $L$_last_num_blocks_is_5_668

$L$_last_num_blocks_is_3_1_668:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_668
	je	NEAR $L$_last_num_blocks_is_2_668
$L$_last_num_blocks_is_1_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_669
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_669

$L$_16_blocks_overflow_669:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_669:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_670





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_670
$L$_small_initial_partial_block_670:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_670
$L$_small_initial_compute_done_670:
$L$_after_reduction_670:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_2_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_671
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_671

$L$_16_blocks_overflow_671:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_671:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_672





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_672
$L$_small_initial_partial_block_672:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_672:

	or	r13,r13
	je	NEAR $L$_after_reduction_672
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_672:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_3_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_673
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_673

$L$_16_blocks_overflow_673:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_673:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_674





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_674
$L$_small_initial_partial_block_674:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_674:

	or	r13,r13
	je	NEAR $L$_after_reduction_674
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_674:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_4_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_675
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_675

$L$_16_blocks_overflow_675:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_675:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_676





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_676
$L$_small_initial_partial_block_676:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_676:

	or	r13,r13
	je	NEAR $L$_after_reduction_676
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_676:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_5_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_677
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_677

$L$_16_blocks_overflow_677:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_677:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_678





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_678
$L$_small_initial_partial_block_678:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_678:

	or	r13,r13
	je	NEAR $L$_after_reduction_678
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_678:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_6_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_679
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_679

$L$_16_blocks_overflow_679:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_679:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_680





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_680
$L$_small_initial_partial_block_680:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_680:

	or	r13,r13
	je	NEAR $L$_after_reduction_680
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_680:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_7_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_681
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_681

$L$_16_blocks_overflow_681:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_681:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_682





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_682
$L$_small_initial_partial_block_682:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_682:

	or	r13,r13
	je	NEAR $L$_after_reduction_682
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_682:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_8_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_683
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_683

$L$_16_blocks_overflow_683:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_683:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_684





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_684
$L$_small_initial_partial_block_684:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_684:

	or	r13,r13
	je	NEAR $L$_after_reduction_684
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_684:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_9_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_685
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_685

$L$_16_blocks_overflow_685:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_685:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_686





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_686
$L$_small_initial_partial_block_686:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_686:

	or	r13,r13
	je	NEAR $L$_after_reduction_686
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_686:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_10_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_687
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_687

$L$_16_blocks_overflow_687:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_687:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_688





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_688
$L$_small_initial_partial_block_688:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_688:

	or	r13,r13
	je	NEAR $L$_after_reduction_688
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_688:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_11_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_689
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_689

$L$_16_blocks_overflow_689:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_689:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_690





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_690
$L$_small_initial_partial_block_690:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_690:

	or	r13,r13
	je	NEAR $L$_after_reduction_690
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_690:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_12_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_691
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_691

$L$_16_blocks_overflow_691:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_691:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_692





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_692
$L$_small_initial_partial_block_692:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_692:

	or	r13,r13
	je	NEAR $L$_after_reduction_692
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_692:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_13_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_693
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_693

$L$_16_blocks_overflow_693:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_693:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_694





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_694
$L$_small_initial_partial_block_694:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_694:

	or	r13,r13
	je	NEAR $L$_after_reduction_694
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_694:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_14_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_695
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_695

$L$_16_blocks_overflow_695:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_695:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_696





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_696
$L$_small_initial_partial_block_696:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_696:

	or	r13,r13
	je	NEAR $L$_after_reduction_696
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_696:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_15_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_697
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_697

$L$_16_blocks_overflow_697:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_697:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_698





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_698
$L$_small_initial_partial_block_698:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_698:

	or	r13,r13
	je	NEAR $L$_after_reduction_698
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_698:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_16_668:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_699
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_699

$L$_16_blocks_overflow_699:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_699:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_700:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_700:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_700:
	jmp	NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_0_668:
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_668:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_659
$L$_encrypt_32_blocks_659:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_701
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_701
$L$_16_blocks_overflow_701:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_701:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_702
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_702
$L$_16_blocks_overflow_702:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_702:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_703

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_703
	jb	NEAR $L$_last_num_blocks_is_7_1_703


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_703
	jb	NEAR $L$_last_num_blocks_is_11_9_703


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_703
	ja	NEAR $L$_last_num_blocks_is_16_703
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_703
	jmp	NEAR $L$_last_num_blocks_is_13_703

$L$_last_num_blocks_is_11_9_703:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_703
	ja	NEAR $L$_last_num_blocks_is_11_703
	jmp	NEAR $L$_last_num_blocks_is_9_703

$L$_last_num_blocks_is_7_1_703:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_703
	jb	NEAR $L$_last_num_blocks_is_3_1_703

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_703
	je	NEAR $L$_last_num_blocks_is_6_703
	jmp	NEAR $L$_last_num_blocks_is_5_703

$L$_last_num_blocks_is_3_1_703:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_703
	je	NEAR $L$_last_num_blocks_is_2_703
$L$_last_num_blocks_is_1_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_704
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_704

$L$_16_blocks_overflow_704:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_704:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_705





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_705
$L$_small_initial_partial_block_705:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_705
$L$_small_initial_compute_done_705:
$L$_after_reduction_705:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_2_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_706
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_706

$L$_16_blocks_overflow_706:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_706:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_707





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_707
$L$_small_initial_partial_block_707:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_707:

	or	r13,r13
	je	NEAR $L$_after_reduction_707
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_707:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_3_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_708
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_708

$L$_16_blocks_overflow_708:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_708:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_709





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_709
$L$_small_initial_partial_block_709:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_709:

	or	r13,r13
	je	NEAR $L$_after_reduction_709
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_709:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_4_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_710
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_710

$L$_16_blocks_overflow_710:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_710:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_711





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_711
$L$_small_initial_partial_block_711:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_711:

	or	r13,r13
	je	NEAR $L$_after_reduction_711
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_711:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_5_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_712
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_712

$L$_16_blocks_overflow_712:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_712:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_713





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_713
$L$_small_initial_partial_block_713:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_713:

	or	r13,r13
	je	NEAR $L$_after_reduction_713
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_713:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_6_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_714
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_714

$L$_16_blocks_overflow_714:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_714:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_715





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_715
$L$_small_initial_partial_block_715:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_715:

	or	r13,r13
	je	NEAR $L$_after_reduction_715
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_715:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_7_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_716
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_716

$L$_16_blocks_overflow_716:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_716:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_717





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_717
$L$_small_initial_partial_block_717:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_717:

	or	r13,r13
	je	NEAR $L$_after_reduction_717
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_717:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_8_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_718
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_718

$L$_16_blocks_overflow_718:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_718:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_719





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_719
$L$_small_initial_partial_block_719:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_719:

	or	r13,r13
	je	NEAR $L$_after_reduction_719
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_719:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_9_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_720
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_720

$L$_16_blocks_overflow_720:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_720:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_721





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_721
$L$_small_initial_partial_block_721:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_721:

	or	r13,r13
	je	NEAR $L$_after_reduction_721
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_721:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_10_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_722
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_722

$L$_16_blocks_overflow_722:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_722:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_723





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_723
$L$_small_initial_partial_block_723:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_723:

	or	r13,r13
	je	NEAR $L$_after_reduction_723
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_723:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_11_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_724
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_724

$L$_16_blocks_overflow_724:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_724:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_725





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_725
$L$_small_initial_partial_block_725:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_725:

	or	r13,r13
	je	NEAR $L$_after_reduction_725
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_725:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_12_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_726
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_726

$L$_16_blocks_overflow_726:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_726:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_727





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_727
$L$_small_initial_partial_block_727:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_727:

	or	r13,r13
	je	NEAR $L$_after_reduction_727
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_727:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_13_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_728
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_728

$L$_16_blocks_overflow_728:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_728:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_729





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_729
$L$_small_initial_partial_block_729:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_729:

	or	r13,r13
	je	NEAR $L$_after_reduction_729
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_729:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_14_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_730
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_730

$L$_16_blocks_overflow_730:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_730:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_731





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_731
$L$_small_initial_partial_block_731:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_731:

	or	r13,r13
	je	NEAR $L$_after_reduction_731
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_731:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_15_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_732
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_732

$L$_16_blocks_overflow_732:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_732:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_733





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_733
$L$_small_initial_partial_block_733:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_733:

	or	r13,r13
	je	NEAR $L$_after_reduction_733
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_733:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_16_703:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_734
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_734

$L$_16_blocks_overflow_734:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_734:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_735:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_735:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_735:
	jmp	NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_0_703:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_703:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_659
$L$_encrypt_16_blocks_659:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_736
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_736
$L$_16_blocks_overflow_736:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_736:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_737

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_737
	jb	NEAR $L$_last_num_blocks_is_7_1_737


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_737
	jb	NEAR $L$_last_num_blocks_is_11_9_737


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_737
	ja	NEAR $L$_last_num_blocks_is_16_737
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_737
	jmp	NEAR $L$_last_num_blocks_is_13_737

$L$_last_num_blocks_is_11_9_737:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_737
	ja	NEAR $L$_last_num_blocks_is_11_737
	jmp	NEAR $L$_last_num_blocks_is_9_737

$L$_last_num_blocks_is_7_1_737:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_737
	jb	NEAR $L$_last_num_blocks_is_3_1_737

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_737
	je	NEAR $L$_last_num_blocks_is_6_737
	jmp	NEAR $L$_last_num_blocks_is_5_737

$L$_last_num_blocks_is_3_1_737:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_737
	je	NEAR $L$_last_num_blocks_is_2_737
$L$_last_num_blocks_is_1_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_738
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_738

$L$_16_blocks_overflow_738:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_738:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_739





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_739
$L$_small_initial_partial_block_739:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_739
$L$_small_initial_compute_done_739:
$L$_after_reduction_739:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_2_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_740
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_740

$L$_16_blocks_overflow_740:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_740:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_741





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_741
$L$_small_initial_partial_block_741:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_741:

	or	r13,r13
	je	NEAR $L$_after_reduction_741
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_741:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_3_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_742
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_742

$L$_16_blocks_overflow_742:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_742:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_743





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_743
$L$_small_initial_partial_block_743:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_743:

	or	r13,r13
	je	NEAR $L$_after_reduction_743
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_743:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_4_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_744
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_744

$L$_16_blocks_overflow_744:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_744:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_745





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_745
$L$_small_initial_partial_block_745:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_745:

	or	r13,r13
	je	NEAR $L$_after_reduction_745
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_745:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_5_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_746
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_746

$L$_16_blocks_overflow_746:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_746:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_747





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_747
$L$_small_initial_partial_block_747:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_747:

	or	r13,r13
	je	NEAR $L$_after_reduction_747
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_747:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_6_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_748
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_748

$L$_16_blocks_overflow_748:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_748:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_749





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_749
$L$_small_initial_partial_block_749:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_749:

	or	r13,r13
	je	NEAR $L$_after_reduction_749
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_749:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_7_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_750
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_750

$L$_16_blocks_overflow_750:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_750:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_751





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_751
$L$_small_initial_partial_block_751:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_751:

	or	r13,r13
	je	NEAR $L$_after_reduction_751
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_751:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_8_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_752
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_752

$L$_16_blocks_overflow_752:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_752:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_753





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_753
$L$_small_initial_partial_block_753:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_753:

	or	r13,r13
	je	NEAR $L$_after_reduction_753
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_753:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_9_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_754
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_754

$L$_16_blocks_overflow_754:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_754:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_755





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_755
$L$_small_initial_partial_block_755:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_755:

	or	r13,r13
	je	NEAR $L$_after_reduction_755
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_755:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_10_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_756
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_756

$L$_16_blocks_overflow_756:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_756:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_757





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_757
$L$_small_initial_partial_block_757:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_757:

	or	r13,r13
	je	NEAR $L$_after_reduction_757
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_757:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_11_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_758
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_758

$L$_16_blocks_overflow_758:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_758:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_759





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_759
$L$_small_initial_partial_block_759:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_759:

	or	r13,r13
	je	NEAR $L$_after_reduction_759
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_759:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_12_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_760
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_760

$L$_16_blocks_overflow_760:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_760:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_761





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_761
$L$_small_initial_partial_block_761:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_761:

	or	r13,r13
	je	NEAR $L$_after_reduction_761
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_761:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_13_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_762
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_762

$L$_16_blocks_overflow_762:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_762:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_763





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_763
$L$_small_initial_partial_block_763:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_763:

	or	r13,r13
	je	NEAR $L$_after_reduction_763
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_763:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_14_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_764
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_764

$L$_16_blocks_overflow_764:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_764:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_765





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_765
$L$_small_initial_partial_block_765:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_765:

	or	r13,r13
	je	NEAR $L$_after_reduction_765
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_765:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_15_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_766
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_766

$L$_16_blocks_overflow_766:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_766:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_767





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_767
$L$_small_initial_partial_block_767:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_767:

	or	r13,r13
	je	NEAR $L$_after_reduction_767
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_767:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_16_737:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_768
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_768

$L$_16_blocks_overflow_768:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_768:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_769:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_769:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_769:
	jmp	NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_0_737:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_737:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_659

$L$_message_below_32_blocks_659:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_770
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_770:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_771

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_771
	jb	NEAR $L$_last_num_blocks_is_7_1_771


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_771
	jb	NEAR $L$_last_num_blocks_is_11_9_771


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_771
	ja	NEAR $L$_last_num_blocks_is_16_771
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_771
	jmp	NEAR $L$_last_num_blocks_is_13_771

$L$_last_num_blocks_is_11_9_771:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_771
	ja	NEAR $L$_last_num_blocks_is_11_771
	jmp	NEAR $L$_last_num_blocks_is_9_771

$L$_last_num_blocks_is_7_1_771:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_771
	jb	NEAR $L$_last_num_blocks_is_3_1_771

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_771
	je	NEAR $L$_last_num_blocks_is_6_771
	jmp	NEAR $L$_last_num_blocks_is_5_771

$L$_last_num_blocks_is_3_1_771:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_771
	je	NEAR $L$_last_num_blocks_is_2_771
$L$_last_num_blocks_is_1_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_772
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_772

$L$_16_blocks_overflow_772:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_772:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_773





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_773
$L$_small_initial_partial_block_773:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_773
$L$_small_initial_compute_done_773:
$L$_after_reduction_773:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_2_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_774
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_774

$L$_16_blocks_overflow_774:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_774:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_775





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_775
$L$_small_initial_partial_block_775:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_775:

	or	r13,r13
	je	NEAR $L$_after_reduction_775
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_775:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_3_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_776
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_776

$L$_16_blocks_overflow_776:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_776:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_777





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_777
$L$_small_initial_partial_block_777:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_777:

	or	r13,r13
	je	NEAR $L$_after_reduction_777
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_777:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_4_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_778
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_778

$L$_16_blocks_overflow_778:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_778:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_779





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_779
$L$_small_initial_partial_block_779:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_779:

	or	r13,r13
	je	NEAR $L$_after_reduction_779
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_779:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_5_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_780
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_780

$L$_16_blocks_overflow_780:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_780:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_781





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_781
$L$_small_initial_partial_block_781:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_781:

	or	r13,r13
	je	NEAR $L$_after_reduction_781
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_781:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_6_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_782
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_782

$L$_16_blocks_overflow_782:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_782:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_783





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_783
$L$_small_initial_partial_block_783:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_783:

	or	r13,r13
	je	NEAR $L$_after_reduction_783
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_783:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_7_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_784
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_784

$L$_16_blocks_overflow_784:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_784:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_785





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_785
$L$_small_initial_partial_block_785:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_785:

	or	r13,r13
	je	NEAR $L$_after_reduction_785
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_785:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_8_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_786
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_786

$L$_16_blocks_overflow_786:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_786:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_787





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_787
$L$_small_initial_partial_block_787:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_787:

	or	r13,r13
	je	NEAR $L$_after_reduction_787
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_787:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_9_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_788
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_788

$L$_16_blocks_overflow_788:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_788:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_789





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_789
$L$_small_initial_partial_block_789:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_789:

	or	r13,r13
	je	NEAR $L$_after_reduction_789
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_789:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_10_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_790
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_790

$L$_16_blocks_overflow_790:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_790:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_791





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_791
$L$_small_initial_partial_block_791:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_791:

	or	r13,r13
	je	NEAR $L$_after_reduction_791
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_791:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_11_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_792
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_792

$L$_16_blocks_overflow_792:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_792:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_793





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_793
$L$_small_initial_partial_block_793:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_793:

	or	r13,r13
	je	NEAR $L$_after_reduction_793
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_793:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_12_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_794
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_794

$L$_16_blocks_overflow_794:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_794:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_795





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_795
$L$_small_initial_partial_block_795:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_795:

	or	r13,r13
	je	NEAR $L$_after_reduction_795
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_795:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_13_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_796
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_796

$L$_16_blocks_overflow_796:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_796:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_797





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_797
$L$_small_initial_partial_block_797:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_797:

	or	r13,r13
	je	NEAR $L$_after_reduction_797
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_797:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_14_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_798
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_798

$L$_16_blocks_overflow_798:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_798:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_799





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_799
$L$_small_initial_partial_block_799:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_799:

	or	r13,r13
	je	NEAR $L$_after_reduction_799
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_799:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_15_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_800
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_800

$L$_16_blocks_overflow_800:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_800:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_801





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_801
$L$_small_initial_partial_block_801:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_801:

	or	r13,r13
	je	NEAR $L$_after_reduction_801
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_801:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_16_771:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_802
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_802

$L$_16_blocks_overflow_802:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_802:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_803:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_803:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_803:
	jmp	NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_0_771:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_771:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_659

$L$_message_below_equal_16_blocks_659:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_804
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_804


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_804
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_804


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_804
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_804
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_804
	jmp	NEAR $L$_small_initial_num_blocks_is_13_804

$L$_small_initial_num_blocks_is_11_9_804:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_804
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_804
	jmp	NEAR $L$_small_initial_num_blocks_is_9_804

$L$_small_initial_num_blocks_is_7_1_804:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_804
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_804

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_804
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_804
	jmp	NEAR $L$_small_initial_num_blocks_is_5_804

$L$_small_initial_num_blocks_is_3_1_804:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_804
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_804





$L$_small_initial_num_blocks_is_1_804:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm6,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_805





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_805
$L$_small_initial_partial_block_805:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_805
$L$_small_initial_compute_done_805:
$L$_after_reduction_805:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_2_804:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm6,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_806





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_806
$L$_small_initial_partial_block_806:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_806:

	or	r13,r13
	je	NEAR $L$_after_reduction_806
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_806:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_3_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_807





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_807
$L$_small_initial_partial_block_807:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_807:

	or	r13,r13
	je	NEAR $L$_after_reduction_807
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_807:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_4_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_808





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_808
$L$_small_initial_partial_block_808:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_808:

	or	r13,r13
	je	NEAR $L$_after_reduction_808
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_808:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_5_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	xmm7,xmm7,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_809





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_809
$L$_small_initial_partial_block_809:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_809:

	or	r13,r13
	je	NEAR $L$_after_reduction_809
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_809:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_6_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	ymm7,ymm7,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_810





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_810
$L$_small_initial_partial_block_810:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_810:

	or	r13,r13
	je	NEAR $L$_after_reduction_810
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_810:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_7_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_811





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_811
$L$_small_initial_partial_block_811:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_811:

	or	r13,r13
	je	NEAR $L$_after_reduction_811
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_811:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_8_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_812





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_812
$L$_small_initial_partial_block_812:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_812:

	or	r13,r13
	je	NEAR $L$_after_reduction_812
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_812:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_9_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	xmm10,xmm10,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_813





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_813
$L$_small_initial_partial_block_813:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_813:

	or	r13,r13
	je	NEAR $L$_after_reduction_813
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_813:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_10_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	ymm10,ymm10,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_814





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_814
$L$_small_initial_partial_block_814:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_814:

	or	r13,r13
	je	NEAR $L$_after_reduction_814
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_814:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_11_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_815





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_815
$L$_small_initial_partial_block_815:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_815:

	or	r13,r13
	je	NEAR $L$_after_reduction_815
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_815:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_12_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_816





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_816
$L$_small_initial_partial_block_816:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_816:

	or	r13,r13
	je	NEAR $L$_after_reduction_816
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_816:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_13_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	xmm11,xmm11,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_817





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_817
$L$_small_initial_partial_block_817:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_817:

	or	r13,r13
	je	NEAR $L$_after_reduction_817
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_817:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_14_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	ymm11,ymm11,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_818





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_818
$L$_small_initial_partial_block_818:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_818:

	or	r13,r13
	je	NEAR $L$_after_reduction_818
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_818:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_15_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_819





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_819
$L$_small_initial_partial_block_819:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_819:

	or	r13,r13
	je	NEAR $L$_after_reduction_819
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_819:
	jmp	NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_16_804:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_820:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_820:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_820:
$L$_small_initial_blocks_encrypted_804:
$L$_ghash_done_659:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_659:
	jmp	NEAR $L$exit_gcm_decrypt
ALIGN	32
$L$aes_gcm_decrypt_256_avx512:
	cmp	QWORD[112+rbp],0
	je	NEAR $L$_enc_dec_done_821
	xor	r14,r14
	vmovdqu64	xmm14,XMMWORD[64+rdx]

	mov	r11,QWORD[r8]
	or	r11,r11
	je	NEAR $L$_partial_block_done_822
	mov	r10d,16
	lea	r12,[byte_len_to_mask_table]
	cmp	QWORD[112+rbp],r10
	cmovc	r10,QWORD[112+rbp]
	add	r12,r10
	add	r12,r10
	kmovw	k1,[r12]
	vmovdqu8	xmm0{k1}{z},[r9]

	vmovdqu64	xmm3,XMMWORD[16+rdx]
	vmovdqu64	xmm4,XMMWORD[336+rdx]



	lea	r12,[SHIFT_MASK]
	add	r12,r11
	vmovdqu64	xmm5,XMMWORD[r12]
	vpshufb	xmm3,xmm3,xmm5

	vmovdqa64	xmm6,xmm0
	vpxorq	xmm3,xmm3,xmm0


	mov	r13,QWORD[112+rbp]
	add	r13,r11
	sub	r13,16
	jge	NEAR $L$_no_extra_mask_822
	sub	r12,r13
$L$_no_extra_mask_822:



	vmovdqu64	xmm0,XMMWORD[16+r12]
	vpand	xmm3,xmm3,xmm0
	vpand	xmm6,xmm6,xmm0
	vpshufb	xmm6,xmm6,XMMWORD[SHUF_MASK]
	vpshufb	xmm6,xmm6,xmm5
	vpxorq	xmm14,xmm14,xmm6
	cmp	r13,0
	jl	NEAR $L$_partial_incomplete_822

	vpclmulqdq	xmm7,xmm14,xmm4,0x11
	vpclmulqdq	xmm10,xmm14,xmm4,0x00
	vpclmulqdq	xmm11,xmm14,xmm4,0x01
	vpclmulqdq	xmm14,xmm14,xmm4,0x10
	vpxorq	xmm14,xmm14,xmm11

	vpsrldq	xmm11,xmm14,8
	vpslldq	xmm14,xmm14,8
	vpxorq	xmm7,xmm7,xmm11
	vpxorq	xmm14,xmm14,xmm10



	vmovdqu64	xmm11,XMMWORD[POLY2]

	vpclmulqdq	xmm10,xmm11,xmm14,0x01
	vpslldq	xmm10,xmm10,8
	vpxorq	xmm14,xmm14,xmm10



	vpclmulqdq	xmm10,xmm11,xmm14,0x00
	vpsrldq	xmm10,xmm10,4
	vpclmulqdq	xmm14,xmm11,xmm14,0x10
	vpslldq	xmm14,xmm14,4

	vpternlogq	xmm14,xmm7,xmm10,0x96

	mov	QWORD[r8],0

	mov	r12,r11
	mov	r11,16
	sub	r11,r12
	jmp	NEAR $L$_enc_dec_done_822

$L$_partial_incomplete_822:
	mov	r12,QWORD[112+rbp]
	add	QWORD[r8],r12
	mov	r11,QWORD[112+rbp]

$L$_enc_dec_done_822:


	lea	r12,[byte_len_to_mask_table]
	kmovw	k1,[r11*2+r12]
	vmovdqu64	XMMWORD[64+rdx],xmm14
	mov	r12,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_822:
	vmovdqu64	xmm2,XMMWORD[rdx]
	mov	r13,QWORD[112+rbp]
	sub	r13,r11
	je	NEAR $L$_enc_dec_done_821
	cmp	r13,256
	jbe	NEAR $L$_message_below_equal_16_blocks_821

	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vmovdqa64	zmm27,ZMMWORD[ddq_addbe_4444]
	vmovdqa64	zmm28,ZMMWORD[ddq_addbe_1234]






	vmovd	r15d,xmm2
	and	r15d,255

	vshufi64x2	zmm2,zmm2,zmm2,0
	vpshufb	zmm2,zmm2,zmm29



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_823
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_823
$L$_next_16_overflow_823:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_823:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[192+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[208+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[224+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm7
	vmovdqa64	ZMMWORD[832+rsp],zmm10
	vmovdqa64	ZMMWORD[896+rsp],zmm11
	vmovdqa64	ZMMWORD[960+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_824

	vmovdqu64	zmm0,ZMMWORD[288+rdx]
	vmovdqu64	ZMMWORD[704+rsp],zmm0

	vmovdqu64	zmm3,ZMMWORD[224+rdx]
	vmovdqu64	ZMMWORD[640+rsp],zmm3


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[160+rdx]
	vmovdqu64	ZMMWORD[576+rsp],zmm4

	vmovdqu64	zmm5,ZMMWORD[96+rdx]
	vmovdqu64	ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_824:
	cmp	r13,512
	jb	NEAR $L$_message_below_32_blocks_821



	cmp	r15b,240
	jae	NEAR $L$_next_16_overflow_825
	vpaddd	zmm7,zmm2,zmm28
	vpaddd	zmm10,zmm7,zmm27
	vpaddd	zmm11,zmm10,zmm27
	vpaddd	zmm12,zmm11,zmm27
	jmp	NEAR $L$_next_16_ok_825
$L$_next_16_overflow_825:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm12,ZMMWORD[ddq_add_4444]
	vpaddd	zmm7,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm10,zmm7,zmm12
	vpaddd	zmm11,zmm10,zmm12
	vpaddd	zmm12,zmm11,zmm12
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vpshufb	zmm12,zmm12,zmm29
$L$_next_16_ok_825:
	vshufi64x2	zmm2,zmm12,zmm12,255
	add	r15b,16

	vmovdqu8	zmm0,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm3,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm4,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm5,ZMMWORD[448+r11*1+r9]


	vbroadcastf64x2	zmm6,ZMMWORD[rcx]
	vpxorq	zmm7,zmm7,zmm6
	vpxorq	zmm10,zmm10,zmm6
	vpxorq	zmm11,zmm11,zmm6
	vpxorq	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[16+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[32+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[48+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[64+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[80+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[96+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[112+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[128+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[144+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[160+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[176+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[192+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[208+rcx]
	vaesenc	zmm7,zmm7,zmm6
	vaesenc	zmm10,zmm10,zmm6
	vaesenc	zmm11,zmm11,zmm6
	vaesenc	zmm12,zmm12,zmm6
	vbroadcastf64x2	zmm6,ZMMWORD[224+rcx]
	vaesenclast	zmm7,zmm7,zmm6
	vaesenclast	zmm10,zmm10,zmm6
	vaesenclast	zmm11,zmm11,zmm6
	vaesenclast	zmm12,zmm12,zmm6


	vpxorq	zmm7,zmm7,zmm0
	vpxorq	zmm10,zmm10,zmm3
	vpxorq	zmm11,zmm11,zmm4
	vpxorq	zmm12,zmm12,zmm5


	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm7
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm10
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm11
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm12

	vpshufb	zmm7,zmm0,zmm29
	vpshufb	zmm10,zmm3,zmm29
	vpshufb	zmm11,zmm4,zmm29
	vpshufb	zmm12,zmm5,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm7
	vmovdqa64	ZMMWORD[1088+rsp],zmm10
	vmovdqa64	ZMMWORD[1152+rsp],zmm11
	vmovdqa64	ZMMWORD[1216+rsp],zmm12
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_826
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[192+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[128+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[64+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_826:
	mov	r14,1
	add	r11,512
	sub	r13,512

	cmp	r13,768
	jb	NEAR $L$_no_more_big_nblocks_821
$L$_encrypt_big_nblocks_821:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_827
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_827
$L$_16_blocks_overflow_827:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_827:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_828
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_828
$L$_16_blocks_overflow_828:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_828:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_829
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_829
$L$_16_blocks_overflow_829:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_829:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[512+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[576+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[640+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[704+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]


	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96

	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpternlogq	zmm6,zmm12,zmm15,0x96
	vpxorq	zmm6,zmm6,zmm24
	vpternlogq	zmm7,zmm13,zmm10,0x96
	vpxorq	zmm7,zmm7,zmm25
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vextracti64x4	ymm12,zmm6,1
	vpxorq	ymm6,ymm6,ymm12
	vextracti32x4	xmm12,ymm6,1
	vpxorq	xmm6,xmm6,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm6,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[512+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[576+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[640+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[704+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1024+rsp],zmm0
	vmovdqa64	ZMMWORD[1088+rsp],zmm3
	vmovdqa64	ZMMWORD[1152+rsp],zmm4
	vmovdqa64	ZMMWORD[1216+rsp],zmm5
	vmovdqa64	zmm14,zmm6

	add	r11,768
	sub	r13,768
	cmp	r13,768
	jae	NEAR $L$_encrypt_big_nblocks_821

$L$_no_more_big_nblocks_821:

	cmp	r13,512
	jae	NEAR $L$_encrypt_32_blocks_821

	cmp	r13,256
	jae	NEAR $L$_encrypt_16_blocks_821
$L$_encrypt_0_blocks_ghash_32_821:
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,256
	sub	ebx,r10d
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	add	ebx,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_830

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_830
	jb	NEAR $L$_last_num_blocks_is_7_1_830


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_830
	jb	NEAR $L$_last_num_blocks_is_11_9_830


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_830
	ja	NEAR $L$_last_num_blocks_is_16_830
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_830
	jmp	NEAR $L$_last_num_blocks_is_13_830

$L$_last_num_blocks_is_11_9_830:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_830
	ja	NEAR $L$_last_num_blocks_is_11_830
	jmp	NEAR $L$_last_num_blocks_is_9_830

$L$_last_num_blocks_is_7_1_830:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_830
	jb	NEAR $L$_last_num_blocks_is_3_1_830

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_830
	je	NEAR $L$_last_num_blocks_is_6_830
	jmp	NEAR $L$_last_num_blocks_is_5_830

$L$_last_num_blocks_is_3_1_830:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_830
	je	NEAR $L$_last_num_blocks_is_2_830
$L$_last_num_blocks_is_1_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_831
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_831

$L$_16_blocks_overflow_831:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_831:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_832





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_832
$L$_small_initial_partial_block_832:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_832
$L$_small_initial_compute_done_832:
$L$_after_reduction_832:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_2_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_833
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_833

$L$_16_blocks_overflow_833:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_833:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_834





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_834
$L$_small_initial_partial_block_834:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_834:

	or	r13,r13
	je	NEAR $L$_after_reduction_834
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_834:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_3_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_835
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_835

$L$_16_blocks_overflow_835:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_835:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_836





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_836
$L$_small_initial_partial_block_836:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_836:

	or	r13,r13
	je	NEAR $L$_after_reduction_836
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_836:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_4_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_837
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_837

$L$_16_blocks_overflow_837:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_837:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_838





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_838
$L$_small_initial_partial_block_838:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_838:

	or	r13,r13
	je	NEAR $L$_after_reduction_838
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_838:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_5_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_839
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_839

$L$_16_blocks_overflow_839:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_839:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_840





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_840
$L$_small_initial_partial_block_840:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_840:

	or	r13,r13
	je	NEAR $L$_after_reduction_840
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_840:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_6_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_841
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_841

$L$_16_blocks_overflow_841:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_841:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_842





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_842
$L$_small_initial_partial_block_842:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_842:

	or	r13,r13
	je	NEAR $L$_after_reduction_842
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_842:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_7_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_843
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_843

$L$_16_blocks_overflow_843:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_843:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_844





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_844
$L$_small_initial_partial_block_844:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_844:

	or	r13,r13
	je	NEAR $L$_after_reduction_844
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_844:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_8_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_845
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_845

$L$_16_blocks_overflow_845:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_845:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_846





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_846
$L$_small_initial_partial_block_846:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_846:

	or	r13,r13
	je	NEAR $L$_after_reduction_846
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_846:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_9_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_847
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_847

$L$_16_blocks_overflow_847:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_847:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_848





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_848
$L$_small_initial_partial_block_848:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_848:

	or	r13,r13
	je	NEAR $L$_after_reduction_848
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_848:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_10_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_849
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_849

$L$_16_blocks_overflow_849:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_849:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_850





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_850
$L$_small_initial_partial_block_850:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_850:

	or	r13,r13
	je	NEAR $L$_after_reduction_850
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_850:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_11_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_851
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_851

$L$_16_blocks_overflow_851:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_851:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_852





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_852
$L$_small_initial_partial_block_852:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_852:

	or	r13,r13
	je	NEAR $L$_after_reduction_852
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_852:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_12_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_853
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_853

$L$_16_blocks_overflow_853:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_853:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_854





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_854
$L$_small_initial_partial_block_854:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_854:

	or	r13,r13
	je	NEAR $L$_after_reduction_854
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_854:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_13_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_855
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_855

$L$_16_blocks_overflow_855:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_855:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_856





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_856
$L$_small_initial_partial_block_856:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_856:

	or	r13,r13
	je	NEAR $L$_after_reduction_856
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_856:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_14_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_857
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_857

$L$_16_blocks_overflow_857:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_857:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_858





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_858
$L$_small_initial_partial_block_858:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_858:

	or	r13,r13
	je	NEAR $L$_after_reduction_858
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_858:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_15_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_859
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_859

$L$_16_blocks_overflow_859:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_859:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_860





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_860
$L$_small_initial_partial_block_860:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_860:

	or	r13,r13
	je	NEAR $L$_after_reduction_860
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_860:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_16_830:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_861
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_861

$L$_16_blocks_overflow_861:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_861:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm24,zmm14,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_862:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_862:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_862:
	jmp	NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_0_830:
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_830:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_821
$L$_encrypt_32_blocks_821:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_863
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_863
$L$_16_blocks_overflow_863:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_863:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_864
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_864
$L$_16_blocks_overflow_864:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_864:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1024+rsp]
	vmovdqu64	zmm1,ZMMWORD[256+rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[320+rsp]
	vmovdqa64	zmm22,ZMMWORD[1088+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[384+rsp]
	vmovdqa64	zmm8,ZMMWORD[1152+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[448+rsp]
	vmovdqa64	zmm22,ZMMWORD[1216+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[256+r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[320+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[384+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[448+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm26,zmm10,zmm15,0x96
	vpternlogq	zmm24,zmm6,zmm12,0x96
	vpternlogq	zmm25,zmm7,zmm13,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[256+r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[320+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[384+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[448+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[768+rsp],zmm0
	vmovdqa64	ZMMWORD[832+rsp],zmm3
	vmovdqa64	ZMMWORD[896+rsp],zmm4
	vmovdqa64	ZMMWORD[960+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

	sub	r13,512
	add	r11,512
	mov	r10d,r13d
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_865

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_865
	jb	NEAR $L$_last_num_blocks_is_7_1_865


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_865
	jb	NEAR $L$_last_num_blocks_is_11_9_865


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_865
	ja	NEAR $L$_last_num_blocks_is_16_865
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_865
	jmp	NEAR $L$_last_num_blocks_is_13_865

$L$_last_num_blocks_is_11_9_865:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_865
	ja	NEAR $L$_last_num_blocks_is_11_865
	jmp	NEAR $L$_last_num_blocks_is_9_865

$L$_last_num_blocks_is_7_1_865:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_865
	jb	NEAR $L$_last_num_blocks_is_3_1_865

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_865
	je	NEAR $L$_last_num_blocks_is_6_865
	jmp	NEAR $L$_last_num_blocks_is_5_865

$L$_last_num_blocks_is_3_1_865:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_865
	je	NEAR $L$_last_num_blocks_is_2_865
$L$_last_num_blocks_is_1_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_866
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_866

$L$_16_blocks_overflow_866:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_866:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_867





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_867
$L$_small_initial_partial_block_867:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_867
$L$_small_initial_compute_done_867:
$L$_after_reduction_867:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_2_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_868
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_868

$L$_16_blocks_overflow_868:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_868:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_869





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_869
$L$_small_initial_partial_block_869:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_869:

	or	r13,r13
	je	NEAR $L$_after_reduction_869
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_869:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_3_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_870
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_870

$L$_16_blocks_overflow_870:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_870:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_871





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_871
$L$_small_initial_partial_block_871:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_871:

	or	r13,r13
	je	NEAR $L$_after_reduction_871
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_871:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_4_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_872
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_872

$L$_16_blocks_overflow_872:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_872:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_873





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_873
$L$_small_initial_partial_block_873:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_873:

	or	r13,r13
	je	NEAR $L$_after_reduction_873
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_873:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_5_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_874
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_874

$L$_16_blocks_overflow_874:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_874:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_875





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_875
$L$_small_initial_partial_block_875:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_875:

	or	r13,r13
	je	NEAR $L$_after_reduction_875
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_875:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_6_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_876
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_876

$L$_16_blocks_overflow_876:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_876:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_877





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_877
$L$_small_initial_partial_block_877:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_877:

	or	r13,r13
	je	NEAR $L$_after_reduction_877
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_877:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_7_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_878
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_878

$L$_16_blocks_overflow_878:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_878:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_879





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_879
$L$_small_initial_partial_block_879:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_879:

	or	r13,r13
	je	NEAR $L$_after_reduction_879
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_879:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_8_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_880
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_880

$L$_16_blocks_overflow_880:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_880:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_881





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_881
$L$_small_initial_partial_block_881:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_881:

	or	r13,r13
	je	NEAR $L$_after_reduction_881
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_881:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_9_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_882
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_882

$L$_16_blocks_overflow_882:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_882:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_883





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_883
$L$_small_initial_partial_block_883:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_883:

	or	r13,r13
	je	NEAR $L$_after_reduction_883
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_883:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_10_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_884
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_884

$L$_16_blocks_overflow_884:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_884:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_885





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_885
$L$_small_initial_partial_block_885:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_885:

	or	r13,r13
	je	NEAR $L$_after_reduction_885
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_885:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_11_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_886
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_886

$L$_16_blocks_overflow_886:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_886:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_887





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_887
$L$_small_initial_partial_block_887:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_887:

	or	r13,r13
	je	NEAR $L$_after_reduction_887
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_887:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_12_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_888
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_888

$L$_16_blocks_overflow_888:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_888:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_889





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_889
$L$_small_initial_partial_block_889:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_889:

	or	r13,r13
	je	NEAR $L$_after_reduction_889
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_889:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_13_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_890
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_890

$L$_16_blocks_overflow_890:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_890:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_891





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_891
$L$_small_initial_partial_block_891:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_891:

	or	r13,r13
	je	NEAR $L$_after_reduction_891
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_891:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_14_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_892
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_892

$L$_16_blocks_overflow_892:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_892:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_893





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_893
$L$_small_initial_partial_block_893:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_893:

	or	r13,r13
	je	NEAR $L$_after_reduction_893
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_893:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_15_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_894
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_894

$L$_16_blocks_overflow_894:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_894:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_895





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_895
$L$_small_initial_partial_block_895:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_895:

	or	r13,r13
	je	NEAR $L$_after_reduction_895
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_895:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_16_865:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_896
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_896

$L$_16_blocks_overflow_896:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_896:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_897:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_897:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_897:
	jmp	NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_0_865:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_865:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_821
$L$_encrypt_16_blocks_821:
	cmp	r15b,240
	jae	NEAR $L$_16_blocks_overflow_898
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_898
$L$_16_blocks_overflow_898:
	vpshufb	zmm2,zmm2,zmm29
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_898:
	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rsp]




	vshufi64x2	zmm2,zmm5,zmm5,255
	add	r15b,16


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]







	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]



	vpclmulqdq	zmm6,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]



	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00


	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]



	vpternlogq	zmm6,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96



	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]



	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21,ZMMWORD[192+r11*1+r9]



	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]



	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00


	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm26,zmm10,zmm15
	vpxorq	zmm24,zmm6,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]

	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]

	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30



	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21



	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10],zmm5
	vpshufb	zmm0,zmm17,zmm29
	vpshufb	zmm3,zmm19,zmm29
	vpshufb	zmm4,zmm20,zmm29
	vpshufb	zmm5,zmm21,zmm29
	vmovdqa64	ZMMWORD[1280+rsp],zmm0
	vmovdqa64	ZMMWORD[1344+rsp],zmm3
	vmovdqa64	ZMMWORD[1408+rsp],zmm4
	vmovdqa64	ZMMWORD[1472+rsp],zmm5
	vmovdqa64	zmm13,ZMMWORD[1024+rsp]
	vmovdqu64	zmm12,ZMMWORD[256+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1088+rsp]
	vmovdqu64	zmm12,ZMMWORD[320+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1152+rsp]
	vmovdqu64	zmm12,ZMMWORD[384+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1216+rsp]
	vmovdqu64	zmm12,ZMMWORD[448+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_899

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_899
	jb	NEAR $L$_last_num_blocks_is_7_1_899


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_899
	jb	NEAR $L$_last_num_blocks_is_11_9_899


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_899
	ja	NEAR $L$_last_num_blocks_is_16_899
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_899
	jmp	NEAR $L$_last_num_blocks_is_13_899

$L$_last_num_blocks_is_11_9_899:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_899
	ja	NEAR $L$_last_num_blocks_is_11_899
	jmp	NEAR $L$_last_num_blocks_is_9_899

$L$_last_num_blocks_is_7_1_899:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_899
	jb	NEAR $L$_last_num_blocks_is_3_1_899

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_899
	je	NEAR $L$_last_num_blocks_is_6_899
	jmp	NEAR $L$_last_num_blocks_is_5_899

$L$_last_num_blocks_is_3_1_899:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_899
	je	NEAR $L$_last_num_blocks_is_2_899
$L$_last_num_blocks_is_1_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_900
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_900

$L$_16_blocks_overflow_900:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_900:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	xmm0,xmm0,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_901





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_901
$L$_small_initial_partial_block_901:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11











	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_901
$L$_small_initial_compute_done_901:
$L$_after_reduction_901:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_2_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_902
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_902

$L$_16_blocks_overflow_902:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_902:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	ymm0,ymm0,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_903





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_903
$L$_small_initial_partial_block_903:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_903:

	or	r13,r13
	je	NEAR $L$_after_reduction_903
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_903:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_3_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_904
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_904

$L$_16_blocks_overflow_904:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_904:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_905





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_905
$L$_small_initial_partial_block_905:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_905:

	or	r13,r13
	je	NEAR $L$_after_reduction_905
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_905:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_4_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_906
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_906

$L$_16_blocks_overflow_906:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_906:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_907





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_907
$L$_small_initial_partial_block_907:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_907:

	or	r13,r13
	je	NEAR $L$_after_reduction_907
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_907:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_5_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_908
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_908

$L$_16_blocks_overflow_908:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_908:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_909





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_909
$L$_small_initial_partial_block_909:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_909:

	or	r13,r13
	je	NEAR $L$_after_reduction_909
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_909:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_6_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_910
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_910

$L$_16_blocks_overflow_910:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_910:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_911





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_911
$L$_small_initial_partial_block_911:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_911:

	or	r13,r13
	je	NEAR $L$_after_reduction_911
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_911:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_7_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_912
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_912

$L$_16_blocks_overflow_912:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_912:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_913





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_913
$L$_small_initial_partial_block_913:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_913:

	or	r13,r13
	je	NEAR $L$_after_reduction_913
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_913:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_8_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_914
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_914

$L$_16_blocks_overflow_914:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_914:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_915





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_915
$L$_small_initial_partial_block_915:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_915:

	or	r13,r13
	je	NEAR $L$_after_reduction_915
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_915:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_9_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_916
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_916

$L$_16_blocks_overflow_916:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_916:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_917





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_917
$L$_small_initial_partial_block_917:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_917:

	or	r13,r13
	je	NEAR $L$_after_reduction_917
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_917:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_10_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_918
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_918

$L$_16_blocks_overflow_918:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_918:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_919





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_919
$L$_small_initial_partial_block_919:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_919:

	or	r13,r13
	je	NEAR $L$_after_reduction_919
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_919:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_11_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_920
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_920

$L$_16_blocks_overflow_920:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_920:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_921





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_921
$L$_small_initial_partial_block_921:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_921:

	or	r13,r13
	je	NEAR $L$_after_reduction_921
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_921:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_12_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_922
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_922

$L$_16_blocks_overflow_922:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_922:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_923





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_923
$L$_small_initial_partial_block_923:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_923:

	or	r13,r13
	je	NEAR $L$_after_reduction_923
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_923:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_13_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_924
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_924

$L$_16_blocks_overflow_924:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_924:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_925





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_925
$L$_small_initial_partial_block_925:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_925:

	or	r13,r13
	je	NEAR $L$_after_reduction_925
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_925:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_14_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_926
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_926

$L$_16_blocks_overflow_926:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_926:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_927





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_927
$L$_small_initial_partial_block_927:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_927:

	or	r13,r13
	je	NEAR $L$_after_reduction_927
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_927:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_15_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_928
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_928

$L$_16_blocks_overflow_928:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_928:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_929





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_929
$L$_small_initial_partial_block_929:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_929:

	or	r13,r13
	je	NEAR $L$_after_reduction_929
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_929:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_16_899:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_930
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_930

$L$_16_blocks_overflow_930:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_930:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vmovdqa64	zmm8,ZMMWORD[1280+rsp]
	vmovdqu64	zmm1,ZMMWORD[512+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[576+rsp]
	vmovdqa64	zmm22,ZMMWORD[1344+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[640+rsp]
	vmovdqa64	zmm8,ZMMWORD[1408+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[704+rsp]
	vmovdqa64	zmm22,ZMMWORD[1472+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpternlogq	zmm14,zmm24,zmm12,0x96
	vpternlogq	zmm7,zmm25,zmm13,0x96
	vpternlogq	zmm10,zmm26,zmm15,0x96
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vpsrldq	zmm15,zmm10,8
	vpslldq	zmm10,zmm10,8

	vmovdqa64	xmm16,XMMWORD[POLY2]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vpxorq	zmm14,zmm14,zmm15
	vpxorq	zmm7,zmm7,zmm10
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vextracti64x4	ymm12,zmm14,1
	vpxorq	ymm14,ymm14,ymm12
	vextracti32x4	xmm12,ymm14,1
	vpxorq	xmm14,xmm14,xmm12
	vextracti64x4	ymm13,zmm7,1
	vpxorq	ymm7,ymm7,ymm13
	vextracti32x4	xmm13,ymm7,1
	vpxorq	xmm7,xmm7,xmm13
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vpclmulqdq	xmm13,xmm16,xmm7,0x01
	vpslldq	xmm13,xmm13,8
	vpxorq	xmm13,xmm7,xmm13
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vpclmulqdq	xmm12,xmm16,xmm13,0x00
	vpsrldq	xmm12,xmm12,4
	vpclmulqdq	xmm15,xmm16,xmm13,0x10
	vpslldq	xmm15,xmm15,4

	vpternlogq	xmm14,xmm15,xmm12,0x96
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_931:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vpxorq	zmm17,zmm17,zmm14
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm31
	vpxorq	zmm0,zmm0,zmm8
	vpxorq	zmm3,zmm3,zmm22

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_931:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_931:
	jmp	NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_0_899:
	vmovdqa64	zmm13,ZMMWORD[1280+rsp]
	vmovdqu64	zmm12,ZMMWORD[512+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1344+rsp]
	vmovdqu64	zmm12,ZMMWORD[576+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[1408+rsp]
	vmovdqu64	zmm12,ZMMWORD[640+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[1472+rsp]
	vmovdqu64	zmm12,ZMMWORD[704+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_899:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_821

$L$_message_below_32_blocks_821:


	sub	r13,256
	add	r11,256
	mov	r10d,r13d
	test	r14,r14
	jnz	NEAR $L$_skip_hkeys_precomputation_932
	vmovdqu64	zmm3,ZMMWORD[640+rsp]


	vshufi64x2	zmm3,zmm3,zmm3,0x00

	vmovdqu64	zmm4,ZMMWORD[576+rsp]
	vmovdqu64	zmm5,ZMMWORD[512+rsp]

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[448+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[384+rsp],zmm5

	vpclmulqdq	zmm6,zmm4,zmm3,0x11
	vpclmulqdq	zmm7,zmm4,zmm3,0x00
	vpclmulqdq	zmm10,zmm4,zmm3,0x01
	vpclmulqdq	zmm4,zmm4,zmm3,0x10
	vpxorq	zmm4,zmm4,zmm10

	vpsrldq	zmm10,zmm4,8
	vpslldq	zmm4,zmm4,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm4,zmm4,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm4,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm4,zmm4,zmm7



	vpclmulqdq	zmm7,zmm10,zmm4,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm4,zmm10,zmm4,0x10
	vpslldq	zmm4,zmm4,4

	vpternlogq	zmm4,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[320+rsp],zmm4

	vpclmulqdq	zmm6,zmm5,zmm3,0x11
	vpclmulqdq	zmm7,zmm5,zmm3,0x00
	vpclmulqdq	zmm10,zmm5,zmm3,0x01
	vpclmulqdq	zmm5,zmm5,zmm3,0x10
	vpxorq	zmm5,zmm5,zmm10

	vpsrldq	zmm10,zmm5,8
	vpslldq	zmm5,zmm5,8
	vpxorq	zmm6,zmm6,zmm10
	vpxorq	zmm5,zmm5,zmm7



	vmovdqu64	zmm10,ZMMWORD[POLY2]

	vpclmulqdq	zmm7,zmm10,zmm5,0x01
	vpslldq	zmm7,zmm7,8
	vpxorq	zmm5,zmm5,zmm7



	vpclmulqdq	zmm7,zmm10,zmm5,0x00
	vpsrldq	zmm7,zmm7,4
	vpclmulqdq	zmm5,zmm10,zmm5,0x10
	vpslldq	zmm5,zmm5,4

	vpternlogq	zmm5,zmm6,zmm7,0x96

	vmovdqu64	ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_932:
	mov	r14,1
	and	r10d,~15
	mov	ebx,512
	sub	ebx,r10d
	mov	r10d,r13d
	add	r10d,15
	shr	r10d,4
	je	NEAR $L$_last_num_blocks_is_0_933

	cmp	r10d,8
	je	NEAR $L$_last_num_blocks_is_8_933
	jb	NEAR $L$_last_num_blocks_is_7_1_933


	cmp	r10d,12
	je	NEAR $L$_last_num_blocks_is_12_933
	jb	NEAR $L$_last_num_blocks_is_11_9_933


	cmp	r10d,15
	je	NEAR $L$_last_num_blocks_is_15_933
	ja	NEAR $L$_last_num_blocks_is_16_933
	cmp	r10d,14
	je	NEAR $L$_last_num_blocks_is_14_933
	jmp	NEAR $L$_last_num_blocks_is_13_933

$L$_last_num_blocks_is_11_9_933:

	cmp	r10d,10
	je	NEAR $L$_last_num_blocks_is_10_933
	ja	NEAR $L$_last_num_blocks_is_11_933
	jmp	NEAR $L$_last_num_blocks_is_9_933

$L$_last_num_blocks_is_7_1_933:
	cmp	r10d,4
	je	NEAR $L$_last_num_blocks_is_4_933
	jb	NEAR $L$_last_num_blocks_is_3_1_933

	cmp	r10d,6
	ja	NEAR $L$_last_num_blocks_is_7_933
	je	NEAR $L$_last_num_blocks_is_6_933
	jmp	NEAR $L$_last_num_blocks_is_5_933

$L$_last_num_blocks_is_3_1_933:

	cmp	r10d,2
	ja	NEAR $L$_last_num_blocks_is_3_933
	je	NEAR $L$_last_num_blocks_is_2_933
$L$_last_num_blocks_is_1_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,255
	jae	NEAR $L$_16_blocks_overflow_934
	vpaddd	xmm0,xmm2,xmm28
	jmp	NEAR $L$_16_blocks_ok_934

$L$_16_blocks_overflow_934:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	xmm0,xmm0,xmm29
$L$_16_blocks_ok_934:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	xmm17{k1}{z},[r11*1+r9]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	xmm0,xmm0,xmm31
	vaesenclast	xmm0,xmm0,xmm30
	vpxorq	xmm0,xmm0,xmm17
	vextracti32x4	xmm11,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	xmm17,xmm17,xmm29
	vextracti32x4	xmm7,zmm17,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_935





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_935
$L$_small_initial_partial_block_935:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11


	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm0,XMMWORD[POLY2]


	vpclmulqdq	xmm3,xmm0,xmm25,0x01
	vpslldq	xmm3,xmm3,8
	vpxorq	xmm3,xmm25,xmm3


	vpclmulqdq	xmm4,xmm0,xmm3,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm14,xmm0,xmm3,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm4,xmm24,0x96












	vpxorq	xmm14,xmm14,xmm7

	jmp	NEAR $L$_after_reduction_935
$L$_small_initial_compute_done_935:
$L$_after_reduction_935:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_2_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,254
	jae	NEAR $L$_16_blocks_overflow_936
	vpaddd	ymm0,ymm2,ymm28
	jmp	NEAR $L$_16_blocks_ok_936

$L$_16_blocks_overflow_936:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	ymm0,ymm0,ymm29
$L$_16_blocks_ok_936:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	ymm17{k1}{z},[r11*1+r9]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	ymm0,ymm0,ymm31
	vaesenclast	ymm0,ymm0,ymm30
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm11,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	ymm17,ymm17,ymm29
	vextracti32x4	xmm7,zmm17,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_937





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_937
$L$_small_initial_partial_block_937:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm17,xmm1,0x01
	vpclmulqdq	xmm5,xmm17,xmm1,0x10
	vpclmulqdq	xmm0,xmm17,xmm1,0x11
	vpclmulqdq	xmm3,xmm17,xmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_937:

	or	r13,r13
	je	NEAR $L$_after_reduction_937
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_937:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_3_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,253
	jae	NEAR $L$_16_blocks_overflow_938
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_938

$L$_16_blocks_overflow_938:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_938:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_939





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_939
$L$_small_initial_partial_block_939:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm17,ymm1,0x01
	vpclmulqdq	ymm5,ymm17,ymm1,0x10
	vpclmulqdq	ymm0,ymm17,ymm1,0x11
	vpclmulqdq	ymm3,ymm17,ymm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_939:

	or	r13,r13
	je	NEAR $L$_after_reduction_939
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_939:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_4_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	kmovq	k1,[rax*8+r10]
	cmp	r15d,252
	jae	NEAR $L$_16_blocks_overflow_940
	vpaddd	zmm0,zmm2,zmm28
	jmp	NEAR $L$_16_blocks_ok_940

$L$_16_blocks_overflow_940:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpshufb	zmm0,zmm0,zmm29
$L$_16_blocks_ok_940:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm0,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17{k1}{z},[r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vextracti32x4	xmm11,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm17{k1}{z},zmm17
	vpshufb	zmm17,zmm17,zmm29
	vextracti32x4	xmm7,zmm17,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_941





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_941
$L$_small_initial_partial_block_941:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpxorq	zmm4,zmm4,zmm26
	vpxorq	zmm0,zmm0,zmm24
	vpxorq	zmm3,zmm3,zmm25

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_941:

	or	r13,r13
	je	NEAR $L$_after_reduction_941
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_941:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_5_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,251
	jae	NEAR $L$_16_blocks_overflow_942
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	xmm3,xmm0,xmm27
	jmp	NEAR $L$_16_blocks_ok_942

$L$_16_blocks_overflow_942:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
$L$_16_blocks_ok_942:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	xmm3,xmm3,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	xmm3,xmm3,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	xmm3,xmm3,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	xmm3,xmm3,xmm19
	vextracti32x4	xmm11,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	xmm19,xmm19,xmm29
	vextracti32x4	xmm7,zmm19,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_943





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_943
$L$_small_initial_partial_block_943:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_943:

	or	r13,r13
	je	NEAR $L$_after_reduction_943
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_943:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_6_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,250
	jae	NEAR $L$_16_blocks_overflow_944
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	ymm3,ymm0,ymm27
	jmp	NEAR $L$_16_blocks_ok_944

$L$_16_blocks_overflow_944:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
$L$_16_blocks_ok_944:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	ymm3,ymm3,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	ymm3,ymm3,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	ymm3,ymm3,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm11,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	ymm19,ymm19,ymm29
	vextracti32x4	xmm7,zmm19,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_945





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_945
$L$_small_initial_partial_block_945:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm19,xmm1,0x01
	vpclmulqdq	xmm5,xmm19,xmm1,0x10
	vpclmulqdq	xmm0,xmm19,xmm1,0x11
	vpclmulqdq	xmm3,xmm19,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_945:

	or	r13,r13
	je	NEAR $L$_after_reduction_945
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_945:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_7_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,249
	jae	NEAR $L$_16_blocks_overflow_946
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_946

$L$_16_blocks_overflow_946:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_946:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_947





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_947
$L$_small_initial_partial_block_947:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm19,ymm1,0x01
	vpclmulqdq	ymm5,ymm19,ymm1,0x10
	vpclmulqdq	ymm0,ymm19,ymm1,0x11
	vpclmulqdq	ymm3,ymm19,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_947:

	or	r13,r13
	je	NEAR $L$_after_reduction_947
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_947:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_8_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,64
	kmovq	k1,[rax*8+r10]
	cmp	r15d,248
	jae	NEAR $L$_16_blocks_overflow_948
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	jmp	NEAR $L$_16_blocks_ok_948

$L$_16_blocks_overflow_948:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
$L$_16_blocks_ok_948:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm3,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19{k1}{z},[64+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti32x4	xmm11,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm19{k1}{z},zmm19
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vextracti32x4	xmm7,zmm19,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_949





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_949
$L$_small_initial_partial_block_949:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm17,zmm1,0x11
	vpclmulqdq	zmm22,zmm17,zmm1,0x00
	vpclmulqdq	zmm30,zmm17,zmm1,0x01
	vpclmulqdq	zmm31,zmm17,zmm1,0x10
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm19,zmm1,0x01
	vpclmulqdq	zmm5,zmm19,zmm1,0x10
	vpclmulqdq	zmm0,zmm19,zmm1,0x11
	vpclmulqdq	zmm3,zmm19,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_949:

	or	r13,r13
	je	NEAR $L$_after_reduction_949
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_949:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_9_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,247
	jae	NEAR $L$_16_blocks_overflow_950
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	xmm4,xmm3,xmm27
	jmp	NEAR $L$_16_blocks_ok_950

$L$_16_blocks_overflow_950:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
$L$_16_blocks_ok_950:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	xmm4,xmm4,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	xmm4,xmm4,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	xmm4,xmm4,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	xmm4,xmm4,xmm20
	vextracti32x4	xmm11,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	xmm20,xmm20,xmm29
	vextracti32x4	xmm7,zmm20,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_951





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_951
$L$_small_initial_partial_block_951:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_951:

	or	r13,r13
	je	NEAR $L$_after_reduction_951
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_951:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_10_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,246
	jae	NEAR $L$_16_blocks_overflow_952
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	ymm4,ymm3,ymm27
	jmp	NEAR $L$_16_blocks_ok_952

$L$_16_blocks_overflow_952:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
$L$_16_blocks_ok_952:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	ymm4,ymm4,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	ymm4,ymm4,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	ymm4,ymm4,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	ymm4,ymm4,ymm20
	vextracti32x4	xmm11,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	ymm20,ymm20,ymm29
	vextracti32x4	xmm7,zmm20,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_953





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_953
$L$_small_initial_partial_block_953:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm20,xmm1,0x01
	vpclmulqdq	xmm5,xmm20,xmm1,0x10
	vpclmulqdq	xmm0,xmm20,xmm1,0x11
	vpclmulqdq	xmm3,xmm20,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_953:

	or	r13,r13
	je	NEAR $L$_after_reduction_953
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_953:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_11_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,245
	jae	NEAR $L$_16_blocks_overflow_954
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_954

$L$_16_blocks_overflow_954:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_954:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_955





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_955
$L$_small_initial_partial_block_955:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm20,ymm1,0x01
	vpclmulqdq	ymm5,ymm20,ymm1,0x10
	vpclmulqdq	ymm0,ymm20,ymm1,0x11
	vpclmulqdq	ymm3,ymm20,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_955:

	or	r13,r13
	je	NEAR $L$_after_reduction_955
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_955:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_12_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,128
	kmovq	k1,[rax*8+r10]
	cmp	r15d,244
	jae	NEAR $L$_16_blocks_overflow_956
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	jmp	NEAR $L$_16_blocks_ok_956

$L$_16_blocks_overflow_956:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
$L$_16_blocks_ok_956:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm4,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20{k1}{z},[128+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vextracti32x4	xmm11,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm20{k1}{z},zmm20
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vextracti32x4	xmm7,zmm20,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_957





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_957
$L$_small_initial_partial_block_957:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vpxorq	zmm8,zmm0,zmm8
	vpxorq	zmm22,zmm3,zmm22
	vpxorq	zmm30,zmm4,zmm30
	vpxorq	zmm31,zmm5,zmm31
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm20,zmm1,0x01
	vpclmulqdq	zmm5,zmm20,zmm1,0x10
	vpclmulqdq	zmm0,zmm20,zmm1,0x11
	vpclmulqdq	zmm3,zmm20,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_957:

	or	r13,r13
	je	NEAR $L$_after_reduction_957
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_957:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_13_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,243
	jae	NEAR $L$_16_blocks_overflow_958
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	xmm5,xmm4,xmm27
	jmp	NEAR $L$_16_blocks_ok_958

$L$_16_blocks_overflow_958:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
$L$_16_blocks_ok_958:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,0
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	xmm5,xmm5,xmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	xmm5,xmm5,xmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	xmm5,xmm5,xmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	xmm5,xmm5,xmm21
	vextracti32x4	xmm11,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	xmm21,xmm21,xmm29
	vextracti32x4	xmm7,zmm21,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_959





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_959
$L$_small_initial_partial_block_959:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[224+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[288+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96

	vpxorq	zmm30,zmm30,zmm26
	vpxorq	zmm8,zmm8,zmm24
	vpxorq	zmm22,zmm22,zmm25

	vpxorq	zmm30,zmm30,zmm31
	vpsrldq	zmm4,zmm30,8
	vpslldq	zmm5,zmm30,8
	vpxorq	zmm0,zmm8,zmm4
	vpxorq	zmm3,zmm22,zmm5
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_959:

	or	r13,r13
	je	NEAR $L$_after_reduction_959
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_959:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_14_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,242
	jae	NEAR $L$_16_blocks_overflow_960
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	ymm5,ymm4,ymm27
	jmp	NEAR $L$_16_blocks_ok_960

$L$_16_blocks_overflow_960:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
$L$_16_blocks_ok_960:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,1
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	ymm5,ymm5,ymm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	ymm5,ymm5,ymm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	ymm5,ymm5,ymm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	ymm5,ymm5,ymm21
	vextracti32x4	xmm11,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	ymm21,ymm21,ymm29
	vextracti32x4	xmm7,zmm21,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_961





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_961
$L$_small_initial_partial_block_961:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[208+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[272+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	xmm1,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm21,xmm1,0x01
	vpclmulqdq	xmm5,xmm21,xmm1,0x10
	vpclmulqdq	xmm0,xmm21,xmm1,0x11
	vpclmulqdq	xmm3,xmm21,xmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_961:

	or	r13,r13
	je	NEAR $L$_after_reduction_961
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_961:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_15_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,241
	jae	NEAR $L$_16_blocks_overflow_962
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_962

$L$_16_blocks_overflow_962:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_962:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,2
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_963





	sub	r13,16
	mov	QWORD[r8],0
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_963
$L$_small_initial_partial_block_963:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[192+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[256+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm21,ymm1,0x01
	vpclmulqdq	ymm5,ymm21,ymm1,0x10
	vpclmulqdq	ymm0,ymm21,ymm1,0x11
	vpclmulqdq	ymm3,ymm21,ymm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_963:

	or	r13,r13
	je	NEAR $L$_after_reduction_963
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_963:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_16_933:
	lea	r10,[byte64_len_to_mask_table]
	mov	rax,r13
	sub	rax,192
	kmovq	k1,[rax*8+r10]
	cmp	r15d,240
	jae	NEAR $L$_16_blocks_overflow_964
	vpaddd	zmm0,zmm2,zmm28
	vpaddd	zmm3,zmm0,zmm27
	vpaddd	zmm4,zmm3,zmm27
	vpaddd	zmm5,zmm4,zmm27
	jmp	NEAR $L$_16_blocks_ok_964

$L$_16_blocks_overflow_964:
	vpshufb	zmm2,zmm2,zmm29
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vmovdqa64	zmm5,ZMMWORD[ddq_add_4444]
	vpaddd	zmm3,zmm0,zmm5
	vpaddd	zmm4,zmm3,zmm5
	vpaddd	zmm5,zmm4,zmm5
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
$L$_16_blocks_ok_964:




	vbroadcastf64x2	zmm30,ZMMWORD[rcx]
	vpxorq	zmm8,zmm14,ZMMWORD[768+rsp]
	vmovdqu64	zmm1,ZMMWORD[rbx*1+rsp]
	vextracti32x4	xmm2,zmm5,3
	vshufi64x2	zmm2,zmm2,zmm2,0


	vbroadcastf64x2	zmm31,ZMMWORD[16+rcx]
	vmovdqu64	zmm18,ZMMWORD[64+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[832+rsp]
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm30
	vpxorq	zmm4,zmm4,zmm30
	vpxorq	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[32+rcx]


	vpclmulqdq	zmm14,zmm8,zmm1,0x11
	vpclmulqdq	zmm7,zmm8,zmm1,0x00
	vpclmulqdq	zmm10,zmm8,zmm1,0x01
	vpclmulqdq	zmm11,zmm8,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[128+rbx*1+rsp]
	vmovdqa64	zmm8,ZMMWORD[896+rsp]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[48+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vmovdqu64	zmm18,ZMMWORD[192+rbx*1+rsp]
	vmovdqa64	zmm22,ZMMWORD[960+rsp]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[64+rcx]


	vpclmulqdq	zmm20,zmm8,zmm1,0x10
	vpclmulqdq	zmm21,zmm8,zmm1,0x01
	vpclmulqdq	zmm17,zmm8,zmm1,0x11
	vpclmulqdq	zmm19,zmm8,zmm1,0x00
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[80+rcx]


	vpternlogq	zmm14,zmm12,zmm17,0x96
	vpternlogq	zmm7,zmm13,zmm19,0x96
	vpternlogq	zmm11,zmm16,zmm21,0x96
	vpternlogq	zmm10,zmm15,zmm20,0x96
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[96+rcx]
	vmovdqu8	zmm17,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm19,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm20,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm21{k1}{z},[192+r11*1+r9]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[112+rcx]


	vpclmulqdq	zmm15,zmm22,zmm18,0x10
	vpclmulqdq	zmm16,zmm22,zmm18,0x01
	vpclmulqdq	zmm12,zmm22,zmm18,0x11
	vpclmulqdq	zmm13,zmm22,zmm18,0x00
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[128+rcx]
	vpternlogq	zmm10,zmm11,zmm16,0x96
	vpxorq	zmm24,zmm14,zmm12
	vpxorq	zmm25,zmm7,zmm13
	vpxorq	zmm26,zmm10,zmm15
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vbroadcastf64x2	zmm31,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm30
	vaesenc	zmm3,zmm3,zmm30
	vaesenc	zmm4,zmm4,zmm30
	vaesenc	zmm5,zmm5,zmm30
	vbroadcastf64x2	zmm30,ZMMWORD[224+rcx]
	vaesenc	zmm0,zmm0,zmm31
	vaesenc	zmm3,zmm3,zmm31
	vaesenc	zmm4,zmm4,zmm31
	vaesenc	zmm5,zmm5,zmm31
	vaesenclast	zmm0,zmm0,zmm30
	vaesenclast	zmm3,zmm3,zmm30
	vaesenclast	zmm4,zmm4,zmm30
	vaesenclast	zmm5,zmm5,zmm30
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vpxorq	zmm4,zmm4,zmm20
	vpxorq	zmm5,zmm5,zmm21
	vextracti32x4	xmm11,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm21{k1}{z},zmm21
	vpshufb	zmm17,zmm17,zmm29
	vpshufb	zmm19,zmm19,zmm29
	vpshufb	zmm20,zmm20,zmm29
	vpshufb	zmm21,zmm21,zmm29
	vextracti32x4	xmm7,zmm21,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_965:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm11
	vmovdqu64	zmm1,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm17,zmm1,0x11
	vpclmulqdq	zmm3,zmm17,zmm1,0x00
	vpclmulqdq	zmm4,zmm17,zmm1,0x01
	vpclmulqdq	zmm5,zmm17,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[176+rdx]
	vpclmulqdq	zmm8,zmm19,zmm1,0x11
	vpclmulqdq	zmm22,zmm19,zmm1,0x00
	vpclmulqdq	zmm30,zmm19,zmm1,0x01
	vpclmulqdq	zmm31,zmm19,zmm1,0x10
	vmovdqu64	zmm1,ZMMWORD[240+rdx]
	vpclmulqdq	zmm17,zmm20,zmm1,0x11
	vpclmulqdq	zmm19,zmm20,zmm1,0x00
	vpternlogq	zmm8,zmm17,zmm0,0x96
	vpternlogq	zmm22,zmm19,zmm3,0x96
	vpclmulqdq	zmm17,zmm20,zmm1,0x01
	vpclmulqdq	zmm19,zmm20,zmm1,0x10
	vpternlogq	zmm30,zmm17,zmm4,0x96
	vpternlogq	zmm31,zmm19,zmm5,0x96
	vmovdqu64	ymm1,YMMWORD[304+rdx]
	vinserti64x2	zmm1,zmm1,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm21,zmm1,0x01
	vpclmulqdq	zmm5,zmm21,zmm1,0x10
	vpclmulqdq	zmm0,zmm21,zmm1,0x11
	vpclmulqdq	zmm3,zmm21,zmm1,0x00

	vpxorq	zmm4,zmm4,zmm30
	vpternlogq	zmm5,zmm26,zmm31,0x96
	vpternlogq	zmm0,zmm24,zmm8,0x96
	vpternlogq	zmm3,zmm25,zmm22,0x96

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm30,zmm4,8
	vpslldq	zmm31,zmm4,8
	vpxorq	zmm0,zmm0,zmm30
	vpxorq	zmm3,zmm3,zmm31
	vextracti64x4	ymm30,zmm0,1
	vpxorq	ymm0,ymm0,ymm30
	vextracti32x4	xmm30,ymm0,1
	vpxorq	xmm0,xmm0,xmm30
	vextracti64x4	ymm31,zmm3,1
	vpxorq	ymm3,ymm3,ymm31
	vextracti32x4	xmm31,ymm3,1
	vpxorq	xmm3,xmm3,xmm31
	vmovdqa64	xmm1,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm1,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm1,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm1,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_965:
	vpxorq	xmm14,xmm14,xmm7
$L$_after_reduction_965:
	jmp	NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_0_933:
	vmovdqa64	zmm13,ZMMWORD[768+rsp]
	vpxorq	zmm13,zmm13,zmm14
	vmovdqu64	zmm12,ZMMWORD[rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[832+rsp]
	vmovdqu64	zmm12,ZMMWORD[64+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10
	vpxorq	zmm26,zmm4,zmm10
	vpxorq	zmm24,zmm0,zmm6
	vpxorq	zmm25,zmm3,zmm7
	vpternlogq	zmm26,zmm5,zmm11,0x96
	vmovdqa64	zmm13,ZMMWORD[896+rsp]
	vmovdqu64	zmm12,ZMMWORD[128+rbx*1+rsp]
	vpclmulqdq	zmm0,zmm13,zmm12,0x11
	vpclmulqdq	zmm3,zmm13,zmm12,0x00
	vpclmulqdq	zmm4,zmm13,zmm12,0x01
	vpclmulqdq	zmm5,zmm13,zmm12,0x10
	vmovdqa64	zmm13,ZMMWORD[960+rsp]
	vmovdqu64	zmm12,ZMMWORD[192+rbx*1+rsp]
	vpclmulqdq	zmm6,zmm13,zmm12,0x11
	vpclmulqdq	zmm7,zmm13,zmm12,0x00
	vpclmulqdq	zmm10,zmm13,zmm12,0x01
	vpclmulqdq	zmm11,zmm13,zmm12,0x10

	vpternlogq	zmm26,zmm4,zmm10,0x96
	vpternlogq	zmm24,zmm0,zmm6,0x96
	vpternlogq	zmm25,zmm3,zmm7,0x96
	vpternlogq	zmm26,zmm5,zmm11,0x96

	vpsrldq	zmm0,zmm26,8
	vpslldq	zmm3,zmm26,8
	vpxorq	zmm24,zmm24,zmm0
	vpxorq	zmm25,zmm25,zmm3
	vextracti64x4	ymm0,zmm24,1
	vpxorq	ymm24,ymm24,ymm0
	vextracti32x4	xmm0,ymm24,1
	vpxorq	xmm24,xmm24,xmm0
	vextracti64x4	ymm3,zmm25,1
	vpxorq	ymm25,ymm25,ymm3
	vextracti32x4	xmm3,ymm25,1
	vpxorq	xmm25,xmm25,xmm3
	vmovdqa64	xmm4,XMMWORD[POLY2]


	vpclmulqdq	xmm0,xmm4,xmm25,0x01
	vpslldq	xmm0,xmm0,8
	vpxorq	xmm0,xmm25,xmm0


	vpclmulqdq	xmm3,xmm4,xmm0,0x00
	vpsrldq	xmm3,xmm3,4
	vpclmulqdq	xmm14,xmm4,xmm0,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_933:
	vpshufb	xmm2,xmm2,xmm29
	jmp	NEAR $L$_ghash_done_821

$L$_message_below_equal_16_blocks_821:


	mov	r12d,r13d
	add	r12d,15
	shr	r12d,4
	cmp	r12,8
	je	NEAR $L$_small_initial_num_blocks_is_8_966
	jl	NEAR $L$_small_initial_num_blocks_is_7_1_966


	cmp	r12,12
	je	NEAR $L$_small_initial_num_blocks_is_12_966
	jl	NEAR $L$_small_initial_num_blocks_is_11_9_966


	cmp	r12,16
	je	NEAR $L$_small_initial_num_blocks_is_16_966
	cmp	r12,15
	je	NEAR $L$_small_initial_num_blocks_is_15_966
	cmp	r12,14
	je	NEAR $L$_small_initial_num_blocks_is_14_966
	jmp	NEAR $L$_small_initial_num_blocks_is_13_966

$L$_small_initial_num_blocks_is_11_9_966:

	cmp	r12,11
	je	NEAR $L$_small_initial_num_blocks_is_11_966
	cmp	r12,10
	je	NEAR $L$_small_initial_num_blocks_is_10_966
	jmp	NEAR $L$_small_initial_num_blocks_is_9_966

$L$_small_initial_num_blocks_is_7_1_966:
	cmp	r12,4
	je	NEAR $L$_small_initial_num_blocks_is_4_966
	jl	NEAR $L$_small_initial_num_blocks_is_3_1_966

	cmp	r12,7
	je	NEAR $L$_small_initial_num_blocks_is_7_966
	cmp	r12,6
	je	NEAR $L$_small_initial_num_blocks_is_6_966
	jmp	NEAR $L$_small_initial_num_blocks_is_5_966

$L$_small_initial_num_blocks_is_3_1_966:

	cmp	r12,3
	je	NEAR $L$_small_initial_num_blocks_is_3_966
	cmp	r12,2
	je	NEAR $L$_small_initial_num_blocks_is_2_966





$L$_small_initial_num_blocks_is_1_966:
	vmovdqa64	xmm29,XMMWORD[SHUF_MASK]
	vpaddd	xmm0,xmm2,XMMWORD[ONE]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,0
	vpshufb	xmm0,xmm0,xmm29
	vmovdqu8	xmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	xmm0,xmm0,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	xmm0,xmm0,xmm15
	vpxorq	xmm0,xmm0,xmm6
	vextracti32x4	xmm12,zmm0,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	XMMWORD[r11*1+r10]{k1},xmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	xmm6,xmm6,xmm29
	vextracti32x4	xmm13,zmm6,0


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_967





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_967
$L$_small_initial_partial_block_967:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12











	vpxorq	xmm14,xmm14,xmm13

	jmp	NEAR $L$_after_reduction_967
$L$_small_initial_compute_done_967:
$L$_after_reduction_967:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_2_966:
	vmovdqa64	ymm29,YMMWORD[SHUF_MASK]
	vshufi64x2	ymm0,ymm2,ymm2,0
	vpaddd	ymm0,ymm0,YMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,1
	vpshufb	ymm0,ymm0,ymm29
	vmovdqu8	ymm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	ymm0,ymm0,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	ymm0,ymm0,ymm15
	vpxorq	ymm0,ymm0,ymm6
	vextracti32x4	xmm12,zmm0,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	YMMWORD[r11*1+r10]{k1},ymm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	ymm6,ymm6,ymm29
	vextracti32x4	xmm13,zmm6,1
	sub	r13,16 * (2 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_968





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_968
$L$_small_initial_partial_block_968:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm6,xmm20,0x01
	vpclmulqdq	xmm5,xmm6,xmm20,0x10
	vpclmulqdq	xmm0,xmm6,xmm20,0x11
	vpclmulqdq	xmm3,xmm6,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_968:

	or	r13,r13
	je	NEAR $L$_after_reduction_968
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_968:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_3_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,2
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,2
	sub	r13,16 * (3 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_969





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_969
$L$_small_initial_partial_block_969:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm6,ymm20,0x01
	vpclmulqdq	ymm5,ymm6,ymm20,0x10
	vpclmulqdq	ymm0,ymm6,ymm20,0x11
	vpclmulqdq	ymm3,ymm6,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_969:

	or	r13,r13
	je	NEAR $L$_after_reduction_969
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_969:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_4_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm0,3
	vpshufb	zmm0,zmm0,zmm29
	vmovdqu8	zmm6{k1}{z},[r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vextracti32x4	xmm12,zmm0,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10]{k1},zmm0
	vmovdqu8	zmm0{k1}{z},zmm0
	vpshufb	zmm6,zmm6,zmm29
	vextracti32x4	xmm13,zmm6,3
	sub	r13,16 * (4 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_970





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_970
$L$_small_initial_partial_block_970:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_970:

	or	r13,r13
	je	NEAR $L$_after_reduction_970
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_970:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_5_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	xmm3,xmm3,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	xmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	xmm3,xmm3,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	xmm3,xmm3,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	xmm3,xmm3,xmm7
	vextracti32x4	xmm12,zmm3,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	XMMWORD[64+r11*1+r10]{k1},xmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	xmm7,xmm7,xmm29
	vextracti32x4	xmm13,zmm7,0
	sub	r13,16 * (5 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_971





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_971
$L$_small_initial_partial_block_971:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_971:

	or	r13,r13
	je	NEAR $L$_after_reduction_971
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_971:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_6_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	ymm3,ymm3,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	ymm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	ymm3,ymm3,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	ymm3,ymm3,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	ymm3,ymm3,ymm7
	vextracti32x4	xmm12,zmm3,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	YMMWORD[64+r11*1+r10]{k1},ymm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	ymm7,ymm7,ymm29
	vextracti32x4	xmm13,zmm7,1
	sub	r13,16 * (6 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_972





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_972
$L$_small_initial_partial_block_972:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm7,xmm20,0x01
	vpclmulqdq	xmm5,xmm7,xmm20,0x10
	vpclmulqdq	xmm0,xmm7,xmm20,0x11
	vpclmulqdq	xmm3,xmm7,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_972:

	or	r13,r13
	je	NEAR $L$_after_reduction_972
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_972:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_7_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,2
	sub	r13,16 * (7 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_973





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_973
$L$_small_initial_partial_block_973:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm7,ymm20,0x01
	vpclmulqdq	ymm5,ymm7,ymm20,0x10
	vpclmulqdq	ymm0,ymm7,ymm20,0x11
	vpclmulqdq	ymm3,ymm7,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_973:

	or	r13,r13
	je	NEAR $L$_after_reduction_973
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_973:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_8_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,64
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm3,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7{k1}{z},[64+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vextracti32x4	xmm12,zmm3,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10]{k1},zmm3
	vmovdqu8	zmm3{k1}{z},zmm3
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vextracti32x4	xmm13,zmm7,3
	sub	r13,16 * (8 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_974





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_974
$L$_small_initial_partial_block_974:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm6,zmm20,0x11
	vpclmulqdq	zmm16,zmm6,zmm20,0x00
	vpclmulqdq	zmm17,zmm6,zmm20,0x01
	vpclmulqdq	zmm19,zmm6,zmm20,0x10
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm7,zmm20,0x01
	vpclmulqdq	zmm5,zmm7,zmm20,0x10
	vpclmulqdq	zmm0,zmm7,zmm20,0x11
	vpclmulqdq	zmm3,zmm7,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_974:

	or	r13,r13
	je	NEAR $L$_after_reduction_974
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_974:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_9_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	xmm4,xmm4,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	xmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	xmm4,xmm4,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	xmm4,xmm4,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	xmm4,xmm4,xmm10
	vextracti32x4	xmm12,zmm4,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	XMMWORD[128+r11*1+r10]{k1},xmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	xmm10,xmm10,xmm29
	vextracti32x4	xmm13,zmm10,0
	sub	r13,16 * (9 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_975





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_975
$L$_small_initial_partial_block_975:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_975:

	or	r13,r13
	je	NEAR $L$_after_reduction_975
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_975:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_10_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	ymm4,ymm4,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	ymm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	ymm4,ymm4,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	ymm4,ymm4,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	ymm4,ymm4,ymm10
	vextracti32x4	xmm12,zmm4,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	YMMWORD[128+r11*1+r10]{k1},ymm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	ymm10,ymm10,ymm29
	vextracti32x4	xmm13,zmm10,1
	sub	r13,16 * (10 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_976





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_976
$L$_small_initial_partial_block_976:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm10,xmm20,0x01
	vpclmulqdq	xmm5,xmm10,xmm20,0x10
	vpclmulqdq	xmm0,xmm10,xmm20,0x11
	vpclmulqdq	xmm3,xmm10,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_976:

	or	r13,r13
	je	NEAR $L$_after_reduction_976
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_976:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_11_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,2
	sub	r13,16 * (11 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_977





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_977
$L$_small_initial_partial_block_977:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm10,ymm20,0x01
	vpclmulqdq	ymm5,ymm10,ymm20,0x10
	vpclmulqdq	ymm0,ymm10,ymm20,0x11
	vpclmulqdq	ymm3,ymm10,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_977:

	or	r13,r13
	je	NEAR $L$_after_reduction_977
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_977:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_12_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,128
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm4,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10{k1}{z},[128+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vextracti32x4	xmm12,zmm4,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10]{k1},zmm4
	vmovdqu8	zmm4{k1}{z},zmm4
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vextracti32x4	xmm13,zmm10,3
	sub	r13,16 * (12 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_978





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_978
$L$_small_initial_partial_block_978:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vpxorq	zmm15,zmm0,zmm15
	vpxorq	zmm16,zmm3,zmm16
	vpxorq	zmm17,zmm4,zmm17
	vpxorq	zmm19,zmm5,zmm19
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm10,zmm20,0x01
	vpclmulqdq	zmm5,zmm10,zmm20,0x10
	vpclmulqdq	zmm0,zmm10,zmm20,0x11
	vpclmulqdq	zmm3,zmm10,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_978:

	or	r13,r13
	je	NEAR $L$_after_reduction_978
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_978:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_13_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,0
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	xmm5,xmm5,xmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	xmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	xmm5,xmm5,xmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	xmm5,xmm5,xmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	xmm5,xmm5,xmm11
	vextracti32x4	xmm12,zmm5,0
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	XMMWORD[192+r11*1+r10]{k1},xmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	xmm11,xmm11,xmm29
	vextracti32x4	xmm13,zmm11,0
	sub	r13,16 * (13 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_979





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_979
$L$_small_initial_partial_block_979:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[160+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[224+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[288+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96

	vpxorq	zmm17,zmm17,zmm19
	vpsrldq	zmm4,zmm17,8
	vpslldq	zmm5,zmm17,8
	vpxorq	zmm0,zmm15,zmm4
	vpxorq	zmm3,zmm16,zmm5
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_979:

	or	r13,r13
	je	NEAR $L$_after_reduction_979
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_979:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_14_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,1
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	ymm5,ymm5,ymm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	ymm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	ymm5,ymm5,ymm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	ymm5,ymm5,ymm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	ymm5,ymm5,ymm11
	vextracti32x4	xmm12,zmm5,1
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	YMMWORD[192+r11*1+r10]{k1},ymm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	ymm11,ymm11,ymm29
	vextracti32x4	xmm13,zmm11,1
	sub	r13,16 * (14 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_980





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_980
$L$_small_initial_partial_block_980:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[144+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[208+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[272+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	xmm20,XMMWORD[336+rdx]
	vpclmulqdq	xmm4,xmm11,xmm20,0x01
	vpclmulqdq	xmm5,xmm11,xmm20,0x10
	vpclmulqdq	xmm0,xmm11,xmm20,0x11
	vpclmulqdq	xmm3,xmm11,xmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_980:

	or	r13,r13
	je	NEAR $L$_after_reduction_980
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_980:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_15_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,2
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,2
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,2
	sub	r13,16 * (15 - 1)


	cmp	r13,16
	jl	NEAR $L$_small_initial_partial_block_981





	sub	r13,16
	mov	QWORD[r8],0
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

	jmp	NEAR $L$_small_initial_compute_done_981
$L$_small_initial_partial_block_981:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[128+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[192+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[256+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[320+rdx]
	vpclmulqdq	ymm4,ymm11,ymm20,0x01
	vpclmulqdq	ymm5,ymm11,ymm20,0x10
	vpclmulqdq	ymm0,ymm11,ymm20,0x11
	vpclmulqdq	ymm3,ymm11,ymm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_981:

	or	r13,r13
	je	NEAR $L$_after_reduction_981
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_981:
	jmp	NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_16_966:
	vmovdqa64	zmm29,ZMMWORD[SHUF_MASK]
	vshufi64x2	zmm2,zmm2,zmm2,0
	vpaddd	zmm0,zmm2,ZMMWORD[ddq_add_1234]
	vpaddd	zmm3,zmm2,ZMMWORD[ddq_add_5678]
	vpaddd	zmm4,zmm0,ZMMWORD[ddq_add_8888]
	vpaddd	zmm5,zmm3,ZMMWORD[ddq_add_8888]
	lea	r10,[byte64_len_to_mask_table]
	mov	r15,r13
	sub	r15,192
	kmovq	k1,[r15*8+r10]
	vextracti32x4	xmm2,zmm5,3
	vpshufb	zmm0,zmm0,zmm29
	vpshufb	zmm3,zmm3,zmm29
	vpshufb	zmm4,zmm4,zmm29
	vpshufb	zmm5,zmm5,zmm29
	vmovdqu8	zmm6,ZMMWORD[r11*1+r9]
	vmovdqu8	zmm7,ZMMWORD[64+r11*1+r9]
	vmovdqu8	zmm10,ZMMWORD[128+r11*1+r9]
	vmovdqu8	zmm11{k1}{z},[192+r11*1+r9]
	vbroadcastf64x2	zmm15,ZMMWORD[rcx]
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm15
	vpxorq	zmm4,zmm4,zmm15
	vpxorq	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[16+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[32+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[48+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[64+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[80+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[96+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[112+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[128+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[144+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[160+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[176+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[192+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[208+rcx]
	vaesenc	zmm0,zmm0,zmm15
	vaesenc	zmm3,zmm3,zmm15
	vaesenc	zmm4,zmm4,zmm15
	vaesenc	zmm5,zmm5,zmm15
	vbroadcastf64x2	zmm15,ZMMWORD[224+rcx]
	vaesenclast	zmm0,zmm0,zmm15
	vaesenclast	zmm3,zmm3,zmm15
	vaesenclast	zmm4,zmm4,zmm15
	vaesenclast	zmm5,zmm5,zmm15
	vpxorq	zmm0,zmm0,zmm6
	vpxorq	zmm3,zmm3,zmm7
	vpxorq	zmm4,zmm4,zmm10
	vpxorq	zmm5,zmm5,zmm11
	vextracti32x4	xmm12,zmm5,3
	mov	r10,QWORD[120+rbp]
	vmovdqu8	ZMMWORD[r11*1+r10],zmm0
	vmovdqu8	ZMMWORD[64+r11*1+r10],zmm3
	vmovdqu8	ZMMWORD[128+r11*1+r10],zmm4
	vmovdqu8	ZMMWORD[192+r11*1+r10]{k1},zmm5
	vmovdqu8	zmm5{k1}{z},zmm5
	vpshufb	zmm6,zmm6,zmm29
	vpshufb	zmm7,zmm7,zmm29
	vpshufb	zmm10,zmm10,zmm29
	vpshufb	zmm11,zmm11,zmm29
	vextracti32x4	xmm13,zmm11,3
	sub	r13,16 * (16 - 1)
$L$_small_initial_partial_block_982:








	mov	QWORD[r8],r13
	vmovdqu64	XMMWORD[16+rdx],xmm12
	vpxorq	zmm6,zmm6,zmm14
	vmovdqu64	zmm20,ZMMWORD[112+rdx]
	vpclmulqdq	zmm0,zmm6,zmm20,0x11
	vpclmulqdq	zmm3,zmm6,zmm20,0x00
	vpclmulqdq	zmm4,zmm6,zmm20,0x01
	vpclmulqdq	zmm5,zmm6,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[176+rdx]
	vpclmulqdq	zmm15,zmm7,zmm20,0x11
	vpclmulqdq	zmm16,zmm7,zmm20,0x00
	vpclmulqdq	zmm17,zmm7,zmm20,0x01
	vpclmulqdq	zmm19,zmm7,zmm20,0x10
	vmovdqu64	zmm20,ZMMWORD[240+rdx]
	vpclmulqdq	zmm6,zmm10,zmm20,0x11
	vpclmulqdq	zmm7,zmm10,zmm20,0x00
	vpternlogq	zmm15,zmm6,zmm0,0x96
	vpternlogq	zmm16,zmm7,zmm3,0x96
	vpclmulqdq	zmm6,zmm10,zmm20,0x01
	vpclmulqdq	zmm7,zmm10,zmm20,0x10
	vpternlogq	zmm17,zmm6,zmm4,0x96
	vpternlogq	zmm19,zmm7,zmm5,0x96
	vmovdqu64	ymm20,YMMWORD[304+rdx]
	vinserti64x2	zmm20,zmm20,ZMMWORD[336+rdx],2
	vpclmulqdq	zmm4,zmm11,zmm20,0x01
	vpclmulqdq	zmm5,zmm11,zmm20,0x10
	vpclmulqdq	zmm0,zmm11,zmm20,0x11
	vpclmulqdq	zmm3,zmm11,zmm20,0x00

	vpxorq	zmm4,zmm4,zmm17
	vpxorq	zmm5,zmm5,zmm19
	vpxorq	zmm0,zmm0,zmm15
	vpxorq	zmm3,zmm3,zmm16

	vpxorq	zmm4,zmm4,zmm5
	vpsrldq	zmm17,zmm4,8
	vpslldq	zmm19,zmm4,8
	vpxorq	zmm0,zmm0,zmm17
	vpxorq	zmm3,zmm3,zmm19
	vextracti64x4	ymm17,zmm0,1
	vpxorq	ymm0,ymm0,ymm17
	vextracti32x4	xmm17,ymm0,1
	vpxorq	xmm0,xmm0,xmm17
	vextracti64x4	ymm19,zmm3,1
	vpxorq	ymm3,ymm3,ymm19
	vextracti32x4	xmm19,ymm3,1
	vpxorq	xmm3,xmm3,xmm19
	vmovdqa64	xmm20,XMMWORD[POLY2]


	vpclmulqdq	xmm4,xmm20,xmm3,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm4,xmm3,xmm4


	vpclmulqdq	xmm5,xmm20,xmm4,0x00
	vpsrldq	xmm5,xmm5,4
	vpclmulqdq	xmm14,xmm20,xmm4,0x10
	vpslldq	xmm14,xmm14,4
	vpternlogq	xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_982:
	vpxorq	xmm14,xmm14,xmm13
$L$_after_reduction_982:
$L$_small_initial_blocks_encrypted_966:
$L$_ghash_done_821:
	vmovdqu64	XMMWORD[rdx],xmm2
	vmovdqu64	XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_821:
	jmp	NEAR $L$exit_gcm_decrypt
$L$exit_gcm_decrypt:
	cmp	QWORD[112+rbp],256
	jbe	NEAR $L$skip_hkeys_cleanup_983
	vpxor	xmm0,xmm0,xmm0
	vmovdqa64	ZMMWORD[rsp],zmm0
	vmovdqa64	ZMMWORD[64+rsp],zmm0
	vmovdqa64	ZMMWORD[128+rsp],zmm0
	vmovdqa64	ZMMWORD[192+rsp],zmm0
	vmovdqa64	ZMMWORD[256+rsp],zmm0
	vmovdqa64	ZMMWORD[320+rsp],zmm0
	vmovdqa64	ZMMWORD[384+rsp],zmm0
	vmovdqa64	ZMMWORD[448+rsp],zmm0
	vmovdqa64	ZMMWORD[512+rsp],zmm0
	vmovdqa64	ZMMWORD[576+rsp],zmm0
	vmovdqa64	ZMMWORD[640+rsp],zmm0
	vmovdqa64	ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_983:
	vzeroupper
	vmovdqu	xmm15,XMMWORD[((-16))+rbp]
	vmovdqu	xmm14,XMMWORD[((-32))+rbp]
	vmovdqu	xmm13,XMMWORD[((-48))+rbp]
	vmovdqu	xmm12,XMMWORD[((-64))+rbp]
	vmovdqu	xmm11,XMMWORD[((-80))+rbp]
	vmovdqu	xmm10,XMMWORD[((-96))+rbp]
	vmovdqu	xmm9,XMMWORD[((-112))+rbp]
	vmovdqu	xmm8,XMMWORD[((-128))+rbp]
	vmovdqu	xmm7,XMMWORD[((-144))+rbp]
	vmovdqu	xmm6,XMMWORD[((-160))+rbp]
	lea	rsp,[8+rbp]
	pop	rsi

	pop	rdi

	pop	r15

	pop	r14

	pop	r13

	pop	r12

	pop	rbp

	pop	rbx

	DB	0F3h,0C3h		;repret
$L$decrypt_seh_end:


global	ossl_aes_gcm_finalize_avx512

ALIGN	32
ossl_aes_gcm_finalize_avx512:

DB	243,15,30,250
	vmovdqu	xmm2,XMMWORD[336+rcx]
	vmovdqu	xmm3,XMMWORD[32+rcx]
	vmovdqu	xmm4,XMMWORD[64+rcx]


	cmp	rdx,0
	je	NEAR $L$_partial_done_984

	vpclmulqdq	xmm0,xmm4,xmm2,0x11
	vpclmulqdq	xmm16,xmm4,xmm2,0x00
	vpclmulqdq	xmm17,xmm4,xmm2,0x01
	vpclmulqdq	xmm4,xmm4,xmm2,0x10
	vpxorq	xmm4,xmm4,xmm17

	vpsrldq	xmm17,xmm4,8
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm0,xmm0,xmm17
	vpxorq	xmm4,xmm4,xmm16



	vmovdqu64	xmm17,XMMWORD[POLY2]

	vpclmulqdq	xmm16,xmm17,xmm4,0x01
	vpslldq	xmm16,xmm16,8
	vpxorq	xmm4,xmm4,xmm16



	vpclmulqdq	xmm16,xmm17,xmm4,0x00
	vpsrldq	xmm16,xmm16,4
	vpclmulqdq	xmm4,xmm17,xmm4,0x10
	vpslldq	xmm4,xmm4,4

	vpternlogq	xmm4,xmm0,xmm16,0x96

$L$_partial_done_984:
	vmovq	xmm5,QWORD[56+rcx]
	vpinsrq	xmm5,xmm5,QWORD[48+rcx],1
	vpsllq	xmm5,xmm5,3

	vpxor	xmm4,xmm4,xmm5

	vpclmulqdq	xmm0,xmm4,xmm2,0x11
	vpclmulqdq	xmm16,xmm4,xmm2,0x00
	vpclmulqdq	xmm17,xmm4,xmm2,0x01
	vpclmulqdq	xmm4,xmm4,xmm2,0x10
	vpxorq	xmm4,xmm4,xmm17

	vpsrldq	xmm17,xmm4,8
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm0,xmm0,xmm17
	vpxorq	xmm4,xmm4,xmm16



	vmovdqu64	xmm17,XMMWORD[POLY2]

	vpclmulqdq	xmm16,xmm17,xmm4,0x01
	vpslldq	xmm16,xmm16,8
	vpxorq	xmm4,xmm4,xmm16



	vpclmulqdq	xmm16,xmm17,xmm4,0x00
	vpsrldq	xmm16,xmm16,4
	vpclmulqdq	xmm4,xmm17,xmm4,0x10
	vpslldq	xmm4,xmm4,4

	vpternlogq	xmm4,xmm0,xmm16,0x96

	vpshufb	xmm4,xmm4,XMMWORD[SHUF_MASK]
	vpxor	xmm3,xmm3,xmm4

$L$_return_T_984:
	vmovdqu	XMMWORD[64+rcx],xmm3
$L$abort_finalize:
	DB	0F3h,0C3h		;repret


global	ossl_gcm_gmult_avx512


ALIGN	32
ossl_gcm_gmult_avx512:

DB	243,15,30,250
	vmovdqu64	xmm1,XMMWORD[rcx]
	vmovdqu64	xmm2,XMMWORD[336+rdx]

	vpclmulqdq	xmm3,xmm1,xmm2,0x11
	vpclmulqdq	xmm4,xmm1,xmm2,0x00
	vpclmulqdq	xmm5,xmm1,xmm2,0x01
	vpclmulqdq	xmm1,xmm1,xmm2,0x10
	vpxorq	xmm1,xmm1,xmm5

	vpsrldq	xmm5,xmm1,8
	vpslldq	xmm1,xmm1,8
	vpxorq	xmm3,xmm3,xmm5
	vpxorq	xmm1,xmm1,xmm4



	vmovdqu64	xmm5,XMMWORD[POLY2]

	vpclmulqdq	xmm4,xmm5,xmm1,0x01
	vpslldq	xmm4,xmm4,8
	vpxorq	xmm1,xmm1,xmm4



	vpclmulqdq	xmm4,xmm5,xmm1,0x00
	vpsrldq	xmm4,xmm4,4
	vpclmulqdq	xmm1,xmm5,xmm1,0x10
	vpslldq	xmm1,xmm1,4

	vpternlogq	xmm1,xmm3,xmm4,0x96

	vmovdqu64	XMMWORD[rcx],xmm1
	vzeroupper
$L$abort_gmult:
	DB	0F3h,0C3h		;repret


section	.pdata rdata align=4
ALIGN	4
	DD	$L$setiv_seh_begin wrt ..imagebase
	DD	$L$setiv_seh_end wrt ..imagebase
	DD	$L$setiv_seh_info wrt ..imagebase

	DD	$L$ghash_seh_begin wrt ..imagebase
	DD	$L$ghash_seh_end wrt ..imagebase
	DD	$L$ghash_seh_info wrt ..imagebase

	DD	$L$encrypt_seh_begin wrt ..imagebase
	DD	$L$encrypt_seh_end wrt ..imagebase
	DD	$L$encrypt_seh_info wrt ..imagebase

	DD	$L$decrypt_seh_begin wrt ..imagebase
	DD	$L$decrypt_seh_end wrt ..imagebase
	DD	$L$decrypt_seh_info wrt ..imagebase

section	.xdata rdata align=8
ALIGN	8
$L$setiv_seh_info:
DB	1
DB	$L$setiv_seh_prolog_end-$L$setiv_seh_begin
DB	31

DB	165
DB	$L$setiv_seh_save_xmm15-$L$setiv_seh_begin
DB	248
	DW	9
DB	$L$setiv_seh_save_xmm14-$L$setiv_seh_begin
DB	232
	DW	8
DB	$L$setiv_seh_save_xmm13-$L$setiv_seh_begin
DB	216
	DW	7
DB	$L$setiv_seh_save_xmm12-$L$setiv_seh_begin
DB	200
	DW	6
DB	$L$setiv_seh_save_xmm11-$L$setiv_seh_begin
DB	184
	DW	5
DB	$L$setiv_seh_save_xmm10-$L$setiv_seh_begin
DB	168
	DW	4
DB	$L$setiv_seh_save_xmm9-$L$setiv_seh_begin
DB	152
	DW	3
DB	$L$setiv_seh_save_xmm8-$L$setiv_seh_begin
DB	136
	DW	2
DB	$L$setiv_seh_save_xmm7-$L$setiv_seh_begin
DB	120
	DW	1
DB	$L$setiv_seh_save_xmm6-$L$setiv_seh_begin
DB	104
	DW	0

DB	$L$setiv_seh_setfp-$L$setiv_seh_begin
DB	3


DB	$L$setiv_seh_allocstack_xmm-$L$setiv_seh_begin
DB	1
	DW	21
DB	$L$setiv_seh_push_rsi-$L$setiv_seh_begin
DB	96
DB	$L$setiv_seh_push_rdi-$L$setiv_seh_begin
DB	112
DB	$L$setiv_seh_push_r15-$L$setiv_seh_begin
DB	240
DB	$L$setiv_seh_push_r14-$L$setiv_seh_begin
DB	224
DB	$L$setiv_seh_push_r13-$L$setiv_seh_begin
DB	208
DB	$L$setiv_seh_push_r12-$L$setiv_seh_begin
DB	192
DB	$L$setiv_seh_push_rbp-$L$setiv_seh_begin
DB	80
DB	$L$setiv_seh_push_rbx-$L$setiv_seh_begin
DB	48
ALIGN	8
$L$ghash_seh_info:
DB	1
DB	$L$ghash_seh_prolog_end-$L$ghash_seh_begin
DB	31

DB	165
DB	$L$ghash_seh_save_xmm15-$L$ghash_seh_begin
DB	248
	DW	9
DB	$L$ghash_seh_save_xmm14-$L$ghash_seh_begin
DB	232
	DW	8
DB	$L$ghash_seh_save_xmm13-$L$ghash_seh_begin
DB	216
	DW	7
DB	$L$ghash_seh_save_xmm12-$L$ghash_seh_begin
DB	200
	DW	6
DB	$L$ghash_seh_save_xmm11-$L$ghash_seh_begin
DB	184
	DW	5
DB	$L$ghash_seh_save_xmm10-$L$ghash_seh_begin
DB	168
	DW	4
DB	$L$ghash_seh_save_xmm9-$L$ghash_seh_begin
DB	152
	DW	3
DB	$L$ghash_seh_save_xmm8-$L$ghash_seh_begin
DB	136
	DW	2
DB	$L$ghash_seh_save_xmm7-$L$ghash_seh_begin
DB	120
	DW	1
DB	$L$ghash_seh_save_xmm6-$L$ghash_seh_begin
DB	104
	DW	0

DB	$L$ghash_seh_setfp-$L$ghash_seh_begin
DB	3


DB	$L$ghash_seh_allocstack_xmm-$L$ghash_seh_begin
DB	1
	DW	21
DB	$L$ghash_seh_push_rsi-$L$ghash_seh_begin
DB	96
DB	$L$ghash_seh_push_rdi-$L$ghash_seh_begin
DB	112
DB	$L$ghash_seh_push_r15-$L$ghash_seh_begin
DB	240
DB	$L$ghash_seh_push_r14-$L$ghash_seh_begin
DB	224
DB	$L$ghash_seh_push_r13-$L$ghash_seh_begin
DB	208
DB	$L$ghash_seh_push_r12-$L$ghash_seh_begin
DB	192
DB	$L$ghash_seh_push_rbp-$L$ghash_seh_begin
DB	80
DB	$L$ghash_seh_push_rbx-$L$ghash_seh_begin
DB	48
ALIGN	8
$L$encrypt_seh_info:
DB	1
DB	$L$encrypt_seh_prolog_end-$L$encrypt_seh_begin
DB	31

DB	165
DB	$L$encrypt_seh_save_xmm15-$L$encrypt_seh_begin
DB	248
	DW	9
DB	$L$encrypt_seh_save_xmm14-$L$encrypt_seh_begin
DB	232
	DW	8
DB	$L$encrypt_seh_save_xmm13-$L$encrypt_seh_begin
DB	216
	DW	7
DB	$L$encrypt_seh_save_xmm12-$L$encrypt_seh_begin
DB	200
	DW	6
DB	$L$encrypt_seh_save_xmm11-$L$encrypt_seh_begin
DB	184
	DW	5
DB	$L$encrypt_seh_save_xmm10-$L$encrypt_seh_begin
DB	168
	DW	4
DB	$L$encrypt_seh_save_xmm9-$L$encrypt_seh_begin
DB	152
	DW	3
DB	$L$encrypt_seh_save_xmm8-$L$encrypt_seh_begin
DB	136
	DW	2
DB	$L$encrypt_seh_save_xmm7-$L$encrypt_seh_begin
DB	120
	DW	1
DB	$L$encrypt_seh_save_xmm6-$L$encrypt_seh_begin
DB	104
	DW	0

DB	$L$encrypt_seh_setfp-$L$encrypt_seh_begin
DB	3


DB	$L$encrypt_seh_allocstack_xmm-$L$encrypt_seh_begin
DB	1
	DW	21
DB	$L$encrypt_seh_push_rsi-$L$encrypt_seh_begin
DB	96
DB	$L$encrypt_seh_push_rdi-$L$encrypt_seh_begin
DB	112
DB	$L$encrypt_seh_push_r15-$L$encrypt_seh_begin
DB	240
DB	$L$encrypt_seh_push_r14-$L$encrypt_seh_begin
DB	224
DB	$L$encrypt_seh_push_r13-$L$encrypt_seh_begin
DB	208
DB	$L$encrypt_seh_push_r12-$L$encrypt_seh_begin
DB	192
DB	$L$encrypt_seh_push_rbp-$L$encrypt_seh_begin
DB	80
DB	$L$encrypt_seh_push_rbx-$L$encrypt_seh_begin
DB	48
ALIGN	8
$L$decrypt_seh_info:
DB	1
DB	$L$decrypt_seh_prolog_end-$L$decrypt_seh_begin
DB	31

DB	165
DB	$L$decrypt_seh_save_xmm15-$L$decrypt_seh_begin
DB	248
	DW	9
DB	$L$decrypt_seh_save_xmm14-$L$decrypt_seh_begin
DB	232
	DW	8
DB	$L$decrypt_seh_save_xmm13-$L$decrypt_seh_begin
DB	216
	DW	7
DB	$L$decrypt_seh_save_xmm12-$L$decrypt_seh_begin
DB	200
	DW	6
DB	$L$decrypt_seh_save_xmm11-$L$decrypt_seh_begin
DB	184
	DW	5
DB	$L$decrypt_seh_save_xmm10-$L$decrypt_seh_begin
DB	168
	DW	4
DB	$L$decrypt_seh_save_xmm9-$L$decrypt_seh_begin
DB	152
	DW	3
DB	$L$decrypt_seh_save_xmm8-$L$decrypt_seh_begin
DB	136
	DW	2
DB	$L$decrypt_seh_save_xmm7-$L$decrypt_seh_begin
DB	120
	DW	1
DB	$L$decrypt_seh_save_xmm6-$L$decrypt_seh_begin
DB	104
	DW	0

DB	$L$decrypt_seh_setfp-$L$decrypt_seh_begin
DB	3


DB	$L$decrypt_seh_allocstack_xmm-$L$decrypt_seh_begin
DB	1
	DW	21
DB	$L$decrypt_seh_push_rsi-$L$decrypt_seh_begin
DB	96
DB	$L$decrypt_seh_push_rdi-$L$decrypt_seh_begin
DB	112
DB	$L$decrypt_seh_push_r15-$L$decrypt_seh_begin
DB	240
DB	$L$decrypt_seh_push_r14-$L$decrypt_seh_begin
DB	224
DB	$L$decrypt_seh_push_r13-$L$decrypt_seh_begin
DB	208
DB	$L$decrypt_seh_push_r12-$L$decrypt_seh_begin
DB	192
DB	$L$decrypt_seh_push_rbp-$L$decrypt_seh_begin
DB	80
DB	$L$decrypt_seh_push_rbx-$L$decrypt_seh_begin
DB	48
section	.rdata rdata align=16
ALIGN	16
POLY:	DQ	0x0000000000000001,0xC200000000000000

ALIGN	64
POLY2:
	DQ	0x00000001C2000000,0xC200000000000000
	DQ	0x00000001C2000000,0xC200000000000000
	DQ	0x00000001C2000000,0xC200000000000000
	DQ	0x00000001C2000000,0xC200000000000000

ALIGN	16
TWOONE:	DQ	0x0000000000000001,0x0000000100000000



ALIGN	64
SHUF_MASK:
	DQ	0x08090A0B0C0D0E0F,0x0001020304050607
	DQ	0x08090A0B0C0D0E0F,0x0001020304050607
	DQ	0x08090A0B0C0D0E0F,0x0001020304050607
	DQ	0x08090A0B0C0D0E0F,0x0001020304050607

ALIGN	16
SHIFT_MASK:
	DQ	0x0706050403020100,0x0f0e0d0c0b0a0908

ALL_F:
	DQ	0xffffffffffffffff,0xffffffffffffffff

ZERO:
	DQ	0x0000000000000000,0x0000000000000000

ALIGN	16
ONE:
	DQ	0x0000000000000001,0x0000000000000000

ALIGN	16
ONEf:
	DQ	0x0000000000000000,0x0100000000000000

ALIGN	64
ddq_add_1234:
	DQ	0x0000000000000001,0x0000000000000000
	DQ	0x0000000000000002,0x0000000000000000
	DQ	0x0000000000000003,0x0000000000000000
	DQ	0x0000000000000004,0x0000000000000000

ALIGN	64
ddq_add_5678:
	DQ	0x0000000000000005,0x0000000000000000
	DQ	0x0000000000000006,0x0000000000000000
	DQ	0x0000000000000007,0x0000000000000000
	DQ	0x0000000000000008,0x0000000000000000

ALIGN	64
ddq_add_4444:
	DQ	0x0000000000000004,0x0000000000000000
	DQ	0x0000000000000004,0x0000000000000000
	DQ	0x0000000000000004,0x0000000000000000
	DQ	0x0000000000000004,0x0000000000000000

ALIGN	64
ddq_add_8888:
	DQ	0x0000000000000008,0x0000000000000000
	DQ	0x0000000000000008,0x0000000000000000
	DQ	0x0000000000000008,0x0000000000000000
	DQ	0x0000000000000008,0x0000000000000000

ALIGN	64
ddq_addbe_1234:
	DQ	0x0000000000000000,0x0100000000000000
	DQ	0x0000000000000000,0x0200000000000000
	DQ	0x0000000000000000,0x0300000000000000
	DQ	0x0000000000000000,0x0400000000000000

ALIGN	64
ddq_addbe_4444:
	DQ	0x0000000000000000,0x0400000000000000
	DQ	0x0000000000000000,0x0400000000000000
	DQ	0x0000000000000000,0x0400000000000000
	DQ	0x0000000000000000,0x0400000000000000

ALIGN	64
byte_len_to_mask_table:
	DW	0x0000,0x0001,0x0003,0x0007
	DW	0x000f,0x001f,0x003f,0x007f
	DW	0x00ff,0x01ff,0x03ff,0x07ff
	DW	0x0fff,0x1fff,0x3fff,0x7fff
	DW	0xffff

ALIGN	64
byte64_len_to_mask_table:
	DQ	0x0000000000000000,0x0000000000000001
	DQ	0x0000000000000003,0x0000000000000007
	DQ	0x000000000000000f,0x000000000000001f
	DQ	0x000000000000003f,0x000000000000007f
	DQ	0x00000000000000ff,0x00000000000001ff
	DQ	0x00000000000003ff,0x00000000000007ff
	DQ	0x0000000000000fff,0x0000000000001fff
	DQ	0x0000000000003fff,0x0000000000007fff
	DQ	0x000000000000ffff,0x000000000001ffff
	DQ	0x000000000003ffff,0x000000000007ffff
	DQ	0x00000000000fffff,0x00000000001fffff
	DQ	0x00000000003fffff,0x00000000007fffff
	DQ	0x0000000000ffffff,0x0000000001ffffff
	DQ	0x0000000003ffffff,0x0000000007ffffff
	DQ	0x000000000fffffff,0x000000001fffffff
	DQ	0x000000003fffffff,0x000000007fffffff
	DQ	0x00000000ffffffff,0x00000001ffffffff
	DQ	0x00000003ffffffff,0x00000007ffffffff
	DQ	0x0000000fffffffff,0x0000001fffffffff
	DQ	0x0000003fffffffff,0x0000007fffffffff
	DQ	0x000000ffffffffff,0x000001ffffffffff
	DQ	0x000003ffffffffff,0x000007ffffffffff
	DQ	0x00000fffffffffff,0x00001fffffffffff
	DQ	0x00003fffffffffff,0x00007fffffffffff
	DQ	0x0000ffffffffffff,0x0001ffffffffffff
	DQ	0x0003ffffffffffff,0x0007ffffffffffff
	DQ	0x000fffffffffffff,0x001fffffffffffff
	DQ	0x003fffffffffffff,0x007fffffffffffff
	DQ	0x00ffffffffffffff,0x01ffffffffffffff
	DQ	0x03ffffffffffffff,0x07ffffffffffffff
	DQ	0x0fffffffffffffff,0x1fffffffffffffff
	DQ	0x3fffffffffffffff,0x7fffffffffffffff
	DQ	0xffffffffffffffff
