/* aes_gcm_asm.S */
/*
 * Copyright (C) 2006-2026 wolfSSL Inc.
 *
 * This file is part of wolfSSL.
 *
 * wolfSSL is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * wolfSSL is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
 */

#ifdef WOLFSSL_USER_SETTINGS
#ifdef WOLFSSL_USER_SETTINGS_ASM
/*
 * user_settings_asm.h is a file generated by the script user_settings_asm.sh.
 * The script takes in a user_settings.h and produces user_settings_asm.h, which
 * is a stripped down version of user_settings.h containing only preprocessor
 * directives. This makes the header safe to include in assembly (.S) files.
 */
#include "user_settings_asm.h"
#else
/*
 * Note: if user_settings.h contains any C code (e.g. a typedef or function
 * prototype), including it here in an assembly (.S) file will cause an
 * assembler failure. See user_settings_asm.h above.
 */
#include "user_settings.h"
#endif /* WOLFSSL_USER_SETTINGS_ASM */
#endif /* WOLFSSL_USER_SETTINGS */

#ifndef HAVE_INTEL_AVX1
#define HAVE_INTEL_AVX1
#endif /* HAVE_INTEL_AVX1 */
#ifndef NO_AVX2_SUPPORT
#ifndef HAVE_INTEL_AVX2
#define HAVE_INTEL_AVX2
#endif /* HAVE_INTEL_AVX2 */
#endif /* NO_AVX2_SUPPORT */

#ifdef WOLFSSL_X86_64_BUILD
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_aesni_rev8:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_aesni_mod2_128:
.quad	0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl	GCM_generate_m0_aesni
.type	GCM_generate_m0_aesni,@function
.align	16
GCM_generate_m0_aesni:
#else
.section	__TEXT,__text
.globl	_GCM_generate_m0_aesni
.p2align	4
_GCM_generate_m0_aesni:
#endif /* __APPLE__ */
        movdqu	L_GCM_generate_m0_aesni_rev8(%rip), %xmm9
        movdqu	L_GCM_generate_m0_aesni_mod2_128(%rip), %xmm10
        pxor	%xmm8, %xmm8
        movdqu	(%rdi), %xmm0
        movdqu	%xmm8, (%rsi)
        movdqu	%xmm0, %xmm8
        pshufb	%xmm9, %xmm0
        movdqu	%xmm0, %xmm5
        movdqu	%xmm0, %xmm4
        psllq	$63, %xmm5
        psrlq	$0x01, %xmm4
        movdqu	%xmm5, %xmm1
        pslldq	$8, %xmm1
        psrldq	$8, %xmm5
        pshufd	$0xff, %xmm1, %xmm1
        por	%xmm5, %xmm4
        psrad	$31, %xmm1
        pand	%xmm10, %xmm1
        pxor	%xmm4, %xmm1
        movdqu	%xmm1, %xmm5
        movdqu	%xmm1, %xmm4
        psllq	$63, %xmm5
        psrlq	$0x01, %xmm4
        movdqu	%xmm5, %xmm2
        pslldq	$8, %xmm2
        psrldq	$8, %xmm5
        pshufd	$0xff, %xmm2, %xmm2
        por	%xmm5, %xmm4
        psrad	$31, %xmm2
        pand	%xmm10, %xmm2
        pxor	%xmm4, %xmm2
        movdqu	%xmm2, %xmm5
        movdqu	%xmm2, %xmm4
        psllq	$63, %xmm5
        psrlq	$0x01, %xmm4
        movdqu	%xmm5, %xmm3
        pslldq	$8, %xmm3
        psrldq	$8, %xmm5
        pshufd	$0xff, %xmm3, %xmm3
        por	%xmm5, %xmm4
        psrad	$31, %xmm3
        pand	%xmm10, %xmm3
        pxor	%xmm4, %xmm3
        pshufb	%xmm9, %xmm3
        pshufb	%xmm9, %xmm2
        movdqu	%xmm3, %xmm8
        pshufb	%xmm9, %xmm1
        pshufb	%xmm9, %xmm0
        pxor	%xmm2, %xmm8
        movdqu	%xmm3, 16(%rsi)
        movdqu	%xmm2, 32(%rsi)
        movdqu	%xmm8, 48(%rsi)
        movdqu	%xmm1, 64(%rsi)
        movdqu	%xmm3, %xmm4
        movdqu	%xmm2, %xmm5
        movdqu	%xmm8, %xmm6
        pxor	%xmm1, %xmm4
        pxor	%xmm1, %xmm5
        pxor	%xmm1, %xmm6
        movdqu	%xmm4, 80(%rsi)
        movdqu	%xmm5, 96(%rsi)
        movdqu	%xmm6, 112(%rsi)
        movdqu	%xmm0, 128(%rsi)
        pxor	%xmm0, %xmm1
        movdqu	%xmm3, %xmm4
        movdqu	%xmm2, %xmm6
        pxor	%xmm0, %xmm4
        pxor	%xmm0, %xmm6
        movdqu	%xmm4, 144(%rsi)
        movdqu	%xmm6, 160(%rsi)
        pxor	%xmm3, %xmm6
        movdqu	%xmm6, 176(%rsi)
        movdqu	%xmm1, 192(%rsi)
        movdqu	%xmm3, %xmm4
        movdqu	%xmm2, %xmm5
        movdqu	%xmm8, %xmm6
        pxor	%xmm1, %xmm4
        pxor	%xmm1, %xmm5
        pxor	%xmm1, %xmm6
        movdqu	%xmm4, 208(%rsi)
        movdqu	%xmm5, 224(%rsi)
        movdqu	%xmm6, 240(%rsi)
        movdqu	(%rsi), %xmm0
        movdqu	16(%rsi), %xmm1
        movdqu	32(%rsi), %xmm2
        movdqu	48(%rsi), %xmm3
        pshufb	%xmm9, %xmm0
        pshufb	%xmm9, %xmm1
        pshufb	%xmm9, %xmm2
        pshufb	%xmm9, %xmm3
        movdqu	%xmm0, %xmm4
        movdqu	%xmm1, %xmm5
        movdqu	%xmm2, %xmm6
        movdqu	%xmm3, %xmm7
        psllq	$60, %xmm4
        psllq	$60, %xmm5
        psllq	$60, %xmm6
        psllq	$60, %xmm7
        psrlq	$4, %xmm0
        psrlq	$4, %xmm1
        psrlq	$4, %xmm2
        psrlq	$4, %xmm3
        psrldq	$8, %xmm4
        psrldq	$8, %xmm5
        psrldq	$8, %xmm6
        psrldq	$8, %xmm7
        por	%xmm4, %xmm0
        por	%xmm5, %xmm1
        por	%xmm6, %xmm2
        por	%xmm7, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        movdqu	%xmm0, 256(%rsi)
        movdqu	%xmm1, 272(%rsi)
        movdqu	%xmm2, 288(%rsi)
        movdqu	%xmm3, 304(%rsi)
        movdqu	64(%rsi), %xmm0
        movdqu	80(%rsi), %xmm1
        movdqu	96(%rsi), %xmm2
        movdqu	112(%rsi), %xmm3
        pshufb	%xmm9, %xmm0
        pshufb	%xmm9, %xmm1
        pshufb	%xmm9, %xmm2
        pshufb	%xmm9, %xmm3
        movdqu	%xmm0, %xmm4
        movdqu	%xmm1, %xmm5
        movdqu	%xmm2, %xmm6
        movdqu	%xmm3, %xmm7
        psllq	$60, %xmm4
        psllq	$60, %xmm5
        psllq	$60, %xmm6
        psllq	$60, %xmm7
        psrlq	$4, %xmm0
        psrlq	$4, %xmm1
        psrlq	$4, %xmm2
        psrlq	$4, %xmm3
        psrldq	$8, %xmm4
        psrldq	$8, %xmm5
        psrldq	$8, %xmm6
        psrldq	$8, %xmm7
        por	%xmm4, %xmm0
        por	%xmm5, %xmm1
        por	%xmm6, %xmm2
        por	%xmm7, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        movdqu	%xmm0, 320(%rsi)
        movdqu	%xmm1, 336(%rsi)
        movdqu	%xmm2, 352(%rsi)
        movdqu	%xmm3, 368(%rsi)
        movdqu	128(%rsi), %xmm0
        movdqu	144(%rsi), %xmm1
        movdqu	160(%rsi), %xmm2
        movdqu	176(%rsi), %xmm3
        pshufb	%xmm9, %xmm0
        pshufb	%xmm9, %xmm1
        pshufb	%xmm9, %xmm2
        pshufb	%xmm9, %xmm3
        movdqu	%xmm0, %xmm4
        movdqu	%xmm1, %xmm5
        movdqu	%xmm2, %xmm6
        movdqu	%xmm3, %xmm7
        psllq	$60, %xmm4
        psllq	$60, %xmm5
        psllq	$60, %xmm6
        psllq	$60, %xmm7
        psrlq	$4, %xmm0
        psrlq	$4, %xmm1
        psrlq	$4, %xmm2
        psrlq	$4, %xmm3
        psrldq	$8, %xmm4
        psrldq	$8, %xmm5
        psrldq	$8, %xmm6
        psrldq	$8, %xmm7
        por	%xmm4, %xmm0
        por	%xmm5, %xmm1
        por	%xmm6, %xmm2
        por	%xmm7, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        movdqu	%xmm0, 384(%rsi)
        movdqu	%xmm1, 400(%rsi)
        movdqu	%xmm2, 416(%rsi)
        movdqu	%xmm3, 432(%rsi)
        movdqu	192(%rsi), %xmm0
        movdqu	208(%rsi), %xmm1
        movdqu	224(%rsi), %xmm2
        movdqu	240(%rsi), %xmm3
        pshufb	%xmm9, %xmm0
        pshufb	%xmm9, %xmm1
        pshufb	%xmm9, %xmm2
        pshufb	%xmm9, %xmm3
        movdqu	%xmm0, %xmm4
        movdqu	%xmm1, %xmm5
        movdqu	%xmm2, %xmm6
        movdqu	%xmm3, %xmm7
        psllq	$60, %xmm4
        psllq	$60, %xmm5
        psllq	$60, %xmm6
        psllq	$60, %xmm7
        psrlq	$4, %xmm0
        psrlq	$4, %xmm1
        psrlq	$4, %xmm2
        psrlq	$4, %xmm3
        psrldq	$8, %xmm4
        psrldq	$8, %xmm5
        psrldq	$8, %xmm6
        psrldq	$8, %xmm7
        por	%xmm4, %xmm0
        por	%xmm5, %xmm1
        por	%xmm6, %xmm2
        por	%xmm7, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        movdqu	%xmm0, 448(%rsi)
        movdqu	%xmm1, 464(%rsi)
        movdqu	%xmm2, 480(%rsi)
        movdqu	%xmm3, 496(%rsi)
        repz retq
#ifndef __APPLE__
.size	GCM_generate_m0_aesni,.-GCM_generate_m0_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_one:
.quad	0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_two:
.quad	0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_three:
.quad	0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_four:
.quad	0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_five:
.quad	0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_six:
.quad	0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_seven:
.quad	0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_eight:
.quad	0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_bswap_epi64:
.quad	0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_bswap_mask:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_aes_gcm_mod2_128:
.quad	0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_aesni
.type	AES_GCM_encrypt_aesni,@function
.align	16
AES_GCM_encrypt_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_aesni
.p2align	4
_AES_GCM_encrypt_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%rbx
        pushq	%r14
        pushq	%r15
        movq	%rdx, %r12
        movq	%rcx, %rax
        movl	48(%rsp), %r11d
        movl	56(%rsp), %ebx
        movl	64(%rsp), %r14d
        movq	72(%rsp), %r15
        movl	80(%rsp), %r10d
        subq	$0xa0, %rsp
        pxor	%xmm4, %xmm4
        pxor	%xmm6, %xmm6
        cmpl	$12, %ebx
        movl	%ebx, %edx
        jne	L_AES_GCM_encrypt_aesni_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        pinsrq	$0x00, (%rax), %xmm4
        pinsrd	$2, 8(%rax), %xmm4
        pinsrd	$3, %ecx, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        movdqa	%xmm4, %xmm1
        movdqa	(%r15), %xmm5
        pxor	%xmm5, %xmm1
        movdqa	16(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	32(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	48(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	64(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	80(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	96(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	112(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	128(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	144(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_calc_iv_12_last
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	176(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_calc_iv_12_last
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	208(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_aesni_calc_iv_12_last:
        aesenclast	%xmm7, %xmm5
        aesenclast	%xmm7, %xmm1
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        movdqu	%xmm1, 144(%rsp)
        jmp	L_AES_GCM_encrypt_aesni_iv_done
L_AES_GCM_encrypt_aesni_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        movdqa	(%r15), %xmm5
        aesenc	16(%r15), %xmm5
        aesenc	32(%r15), %xmm5
        aesenc	48(%r15), %xmm5
        aesenc	64(%r15), %xmm5
        aesenc	80(%r15), %xmm5
        aesenc	96(%r15), %xmm5
        aesenc	112(%r15), %xmm5
        aesenc	128(%r15), %xmm5
        aesenc	144(%r15), %xmm5
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm9, %xmm5
        aesenc	176(%r15), %xmm5
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm9, %xmm5
        aesenc	208(%r15), %xmm5
        movdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_aesni_calc_iv_1_aesenc_avx_last:
        aesenclast	%xmm9, %xmm5
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_encrypt_aesni_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_aesni_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_aesni_calc_iv_16_loop:
        movdqu	(%rax,%rcx,1), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_aesni_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_aesni_calc_iv_done
L_AES_GCM_encrypt_aesni_calc_iv_lt16:
        subq	$16, %rsp
        pxor	%xmm8, %xmm8
        xorl	%ebx, %ebx
        movdqu	%xmm8, (%rsp)
L_AES_GCM_encrypt_aesni_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_aesni_calc_iv_loop
        movdqu	(%rsp), %xmm8
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
L_AES_GCM_encrypt_aesni_calc_iv_done:
        # T = Encrypt counter
        pxor	%xmm0, %xmm0
        shll	$3, %edx
        pinsrq	$0x00, %rdx, %xmm0
        pxor	%xmm0, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        #   Encrypt counter
        movdqa	(%r15), %xmm8
        pxor	%xmm4, %xmm8
        aesenc	16(%r15), %xmm8
        aesenc	32(%r15), %xmm8
        aesenc	48(%r15), %xmm8
        aesenc	64(%r15), %xmm8
        aesenc	80(%r15), %xmm8
        aesenc	96(%r15), %xmm8
        aesenc	112(%r15), %xmm8
        aesenc	128(%r15), %xmm8
        aesenc	144(%r15), %xmm8
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%r15), %xmm8
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%r15), %xmm8
        movdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_aesni_calc_iv_2_aesenc_avx_last:
        aesenclast	%xmm9, %xmm8
        movdqu	%xmm8, 144(%rsp)
L_AES_GCM_encrypt_aesni_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_encrypt_aesni_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_aesni_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_aesni_calc_aad_16_loop:
        movdqu	(%r12,%rcx,1), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        pshufd	$0x4e, %xmm6, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm6, %xmm3
        pclmulqdq	$0x00, %xmm6, %xmm0
        pxor	%xmm6, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm6, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm6
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm6
        por	%xmm0, %xmm7
        por	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_aesni_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_aesni_calc_aad_done
L_AES_GCM_encrypt_aesni_calc_aad_lt16:
        subq	$16, %rsp
        pxor	%xmm8, %xmm8
        xorl	%ebx, %ebx
        movdqu	%xmm8, (%rsp)
L_AES_GCM_encrypt_aesni_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_aesni_calc_aad_loop
        movdqu	(%rsp), %xmm8
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        pshufd	$0x4e, %xmm6, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm6, %xmm3
        pclmulqdq	$0x00, %xmm6, %xmm0
        pxor	%xmm6, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm6, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm6
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm6
        por	%xmm0, %xmm7
        por	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm6
L_AES_GCM_encrypt_aesni_calc_aad_done:
        # Calculate counter and H
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm4
        movdqa	%xmm5, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm4
        movdqa	%xmm5, %xmm8
        movdqu	%xmm4, 128(%rsp)
        psrlq	$63, %xmm9
        psllq	$0x01, %xmm8
        pslldq	$8, %xmm9
        por	%xmm9, %xmm8
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm8, %xmm5
        xorq	%rbx, %rbx
        cmpl	$0x80, %r9d
        movl	%r9d, %r13d
        jl	L_AES_GCM_encrypt_aesni_done_128
        andl	$0xffffff80, %r13d
        movdqa	%xmm6, %xmm2
        # H ^ 1
        movdqu	%xmm5, (%rsp)
        # H ^ 2
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm5, %xmm10
        movdqa	%xmm5, %xmm11
        movdqa	%xmm5, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm5, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm0
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm0
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm0
        movdqu	%xmm0, 16(%rsp)
        # H ^ 3
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm1
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm1
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm1
        movdqu	%xmm1, 32(%rsp)
        # H ^ 4
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm3
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm3
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm3
        movdqu	%xmm3, 48(%rsp)
        # H ^ 5
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 64(%rsp)
        # H ^ 6
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 80(%rsp)
        # H ^ 7
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 96(%rsp)
        # H ^ 8
        pshufd	$0x4e, %xmm3, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm3, %xmm11
        pclmulqdq	$0x00, %xmm3, %xmm8
        pxor	%xmm3, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 112(%rsp)
        # First 128 bytes of input
        movdqu	128(%rsp), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%r15), %xmm7
        movdqu	%xmm0, 128(%rsp)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqa	16(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	32(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	48(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	64(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	80(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	96(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	112(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	128(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	144(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_enc_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_enc_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_aesni_enc_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%rdi), %xmm0
        movdqu	16(%rdi), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%rsi)
        movdqu	%xmm9, 16(%rsi)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%rdi), %xmm0
        movdqu	48(%rdi), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%rsi)
        movdqu	%xmm11, 48(%rsi)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%rdi), %xmm0
        movdqu	80(%rdi), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%rsi)
        movdqu	%xmm13, 80(%rsi)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%rdi), %xmm0
        movdqu	112(%rdi), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%rsi)
        movdqu	%xmm15, 112(%rsi)
        cmpl	$0x80, %r13d
        movl	$0x80, %ebx
        jle	L_AES_GCM_encrypt_aesni_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_aesni_ghash_128:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        movdqu	128(%rsp), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%r15), %xmm7
        movdqu	%xmm0, 128(%rsp)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqu	112(%rsp), %xmm7
        movdqu	-128(%rdx), %xmm0
        aesenc	16(%r15), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        pxor	%xmm2, %xmm0
        pshufd	$0x4e, %xmm7, %xmm1
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm7, %xmm1
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm3
        pclmulqdq	$0x11, %xmm7, %xmm3
        aesenc	16(%r15), %xmm9
        aesenc	16(%r15), %xmm10
        movdqa	%xmm0, %xmm2
        pclmulqdq	$0x00, %xmm7, %xmm2
        aesenc	16(%r15), %xmm11
        aesenc	16(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm1
        aesenc	16(%r15), %xmm13
        aesenc	16(%r15), %xmm14
        aesenc	16(%r15), %xmm15
        pxor	%xmm2, %xmm1
        pxor	%xmm3, %xmm1
        movdqu	96(%rsp), %xmm7
        movdqu	-112(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	32(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	32(%r15), %xmm9
        aesenc	32(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	32(%r15), %xmm11
        aesenc	32(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	32(%r15), %xmm13
        aesenc	32(%r15), %xmm14
        aesenc	32(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	80(%rsp), %xmm7
        movdqu	-96(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	48(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	48(%r15), %xmm9
        aesenc	48(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	48(%r15), %xmm11
        aesenc	48(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	48(%r15), %xmm13
        aesenc	48(%r15), %xmm14
        aesenc	48(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	64(%rsp), %xmm7
        movdqu	-80(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	64(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	64(%r15), %xmm9
        aesenc	64(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	64(%r15), %xmm11
        aesenc	64(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	64(%r15), %xmm13
        aesenc	64(%r15), %xmm14
        aesenc	64(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	48(%rsp), %xmm7
        movdqu	-64(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	80(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	80(%r15), %xmm9
        aesenc	80(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	80(%r15), %xmm11
        aesenc	80(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	80(%r15), %xmm13
        aesenc	80(%r15), %xmm14
        aesenc	80(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	32(%rsp), %xmm7
        movdqu	-48(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	96(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	96(%r15), %xmm9
        aesenc	96(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	96(%r15), %xmm11
        aesenc	96(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	96(%r15), %xmm13
        aesenc	96(%r15), %xmm14
        aesenc	96(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	16(%rsp), %xmm7
        movdqu	-32(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	112(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	112(%r15), %xmm9
        aesenc	112(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	112(%r15), %xmm11
        aesenc	112(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	112(%r15), %xmm13
        aesenc	112(%r15), %xmm14
        aesenc	112(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	(%rsp), %xmm7
        movdqu	-16(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	128(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	128(%r15), %xmm9
        aesenc	128(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	128(%r15), %xmm11
        aesenc	128(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	128(%r15), %xmm13
        aesenc	128(%r15), %xmm14
        aesenc	128(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqa	%xmm1, %xmm5
        psrldq	$8, %xmm1
        pslldq	$8, %xmm5
        aesenc	144(%r15), %xmm8
        pxor	%xmm5, %xmm2
        pxor	%xmm1, %xmm3
        movdqa	%xmm2, %xmm7
        movdqa	%xmm2, %xmm4
        movdqa	%xmm2, %xmm5
        aesenc	144(%r15), %xmm9
        pslld	$31, %xmm7
        pslld	$30, %xmm4
        pslld	$25, %xmm5
        aesenc	144(%r15), %xmm10
        pxor	%xmm4, %xmm7
        pxor	%xmm5, %xmm7
        aesenc	144(%r15), %xmm11
        movdqa	%xmm7, %xmm4
        pslldq	$12, %xmm7
        psrldq	$4, %xmm4
        aesenc	144(%r15), %xmm12
        pxor	%xmm7, %xmm2
        movdqa	%xmm2, %xmm5
        movdqa	%xmm2, %xmm1
        movdqa	%xmm2, %xmm0
        aesenc	144(%r15), %xmm13
        psrld	$0x01, %xmm5
        psrld	$2, %xmm1
        psrld	$7, %xmm0
        aesenc	144(%r15), %xmm14
        pxor	%xmm1, %xmm5
        pxor	%xmm0, %xmm5
        aesenc	144(%r15), %xmm15
        pxor	%xmm4, %xmm5
        pxor	%xmm5, %xmm2
        pxor	%xmm3, %xmm2
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_aesni_aesenc_128_ghash_avx_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%rcx), %xmm0
        movdqu	16(%rcx), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%rdx)
        movdqu	%xmm9, 16(%rdx)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%rcx), %xmm0
        movdqu	48(%rcx), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%rdx)
        movdqu	%xmm11, 48(%rdx)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%rcx), %xmm0
        movdqu	80(%rcx), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%rdx)
        movdqu	%xmm13, 80(%rdx)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%rcx), %xmm0
        movdqu	112(%rcx), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%rdx)
        movdqu	%xmm15, 112(%rdx)
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_aesni_ghash_128
L_AES_GCM_encrypt_aesni_end_128:
        movdqa	L_aes_gcm_bswap_mask(%rip), %xmm4
        pshufb	%xmm4, %xmm8
        pshufb	%xmm4, %xmm9
        pshufb	%xmm4, %xmm10
        pshufb	%xmm4, %xmm11
        pxor	%xmm2, %xmm8
        pshufb	%xmm4, %xmm12
        pshufb	%xmm4, %xmm13
        pshufb	%xmm4, %xmm14
        pshufb	%xmm4, %xmm15
        movdqu	112(%rsp), %xmm7
        pshufd	$0x4e, %xmm8, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm8, %xmm3
        pclmulqdq	$0x00, %xmm8, %xmm0
        pxor	%xmm8, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm4
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	96(%rsp), %xmm7
        pshufd	$0x4e, %xmm9, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm9, %xmm3
        pclmulqdq	$0x00, %xmm9, %xmm0
        pxor	%xmm9, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	80(%rsp), %xmm7
        pshufd	$0x4e, %xmm10, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm10, %xmm3
        pclmulqdq	$0x00, %xmm10, %xmm0
        pxor	%xmm10, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	64(%rsp), %xmm7
        pshufd	$0x4e, %xmm11, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm11, %xmm3
        pclmulqdq	$0x00, %xmm11, %xmm0
        pxor	%xmm11, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	48(%rsp), %xmm7
        pshufd	$0x4e, %xmm12, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm12, %xmm3
        pclmulqdq	$0x00, %xmm12, %xmm0
        pxor	%xmm12, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	32(%rsp), %xmm7
        pshufd	$0x4e, %xmm13, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm13, %xmm3
        pclmulqdq	$0x00, %xmm13, %xmm0
        pxor	%xmm13, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	16(%rsp), %xmm7
        pshufd	$0x4e, %xmm14, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm14, %xmm3
        pclmulqdq	$0x00, %xmm14, %xmm0
        pxor	%xmm14, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	(%rsp), %xmm7
        pshufd	$0x4e, %xmm15, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm15, %xmm3
        pclmulqdq	$0x00, %xmm15, %xmm0
        pxor	%xmm15, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqa	%xmm4, %xmm0
        movdqa	%xmm4, %xmm1
        movdqa	%xmm4, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm4
        movdqa	%xmm4, %xmm2
        movdqa	%xmm4, %xmm3
        movdqa	%xmm4, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm4, %xmm2
        pxor	%xmm2, %xmm6
        movdqu	(%rsp), %xmm5
L_AES_GCM_encrypt_aesni_done_128:
        movl	%r9d, %edx
        cmpl	%edx, %ebx
        jge	L_AES_GCM_encrypt_aesni_done_enc
        movl	%r9d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_aesni_last_block_done
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        movdqu	128(%rsp), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%r15), %xmm8
        movdqu	%xmm9, 128(%rsp)
        aesenc	16(%r15), %xmm8
        aesenc	32(%r15), %xmm8
        aesenc	48(%r15), %xmm8
        aesenc	64(%r15), %xmm8
        aesenc	80(%r15), %xmm8
        aesenc	96(%r15), %xmm8
        aesenc	112(%r15), %xmm8
        aesenc	128(%r15), %xmm8
        aesenc	144(%r15), %xmm8
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%r15), %xmm8
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%r15), %xmm8
        movdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_aesni_aesenc_block_aesenc_avx_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_aesni_last_block_ghash
L_AES_GCM_encrypt_aesni_last_block_start:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        movdqu	128(%rsp), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%r15), %xmm8
        movdqu	%xmm9, 128(%rsp)
        movdqa	%xmm6, %xmm10
        pclmulqdq	$16, %xmm5, %xmm10
        aesenc	16(%r15), %xmm8
        aesenc	32(%r15), %xmm8
        movdqa	%xmm6, %xmm11
        pclmulqdq	$0x01, %xmm5, %xmm11
        aesenc	48(%r15), %xmm8
        aesenc	64(%r15), %xmm8
        movdqa	%xmm6, %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm12
        aesenc	80(%r15), %xmm8
        movdqa	%xmm6, %xmm1
        pclmulqdq	$0x11, %xmm5, %xmm1
        aesenc	96(%r15), %xmm8
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm2
        psrldq	$8, %xmm10
        pslldq	$8, %xmm2
        aesenc	112(%r15), %xmm8
        movdqa	%xmm1, %xmm3
        pxor	%xmm12, %xmm2
        pxor	%xmm10, %xmm3
        movdqa	L_aes_gcm_mod2_128(%rip), %xmm0
        movdqa	%xmm2, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	128(%r15), %xmm8
        pshufd	$0x4e, %xmm2, %xmm10
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	144(%r15), %xmm8
        pshufd	$0x4e, %xmm10, %xmm6
        pxor	%xmm11, %xmm6
        pxor	%xmm3, %xmm6
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%r15), %xmm8
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%r15), %xmm8
        movdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_aesni_aesenc_gfmul_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_aesni_last_block_start
L_AES_GCM_encrypt_aesni_last_block_ghash:
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
L_AES_GCM_encrypt_aesni_last_block_done:
        movl	%r9d, %ecx
        movl	%ecx, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_done
        movdqu	128(%rsp), %xmm4
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm4
        pxor	(%r15), %xmm4
        aesenc	16(%r15), %xmm4
        aesenc	32(%r15), %xmm4
        aesenc	48(%r15), %xmm4
        aesenc	64(%r15), %xmm4
        aesenc	80(%r15), %xmm4
        aesenc	96(%r15), %xmm4
        aesenc	112(%r15), %xmm4
        aesenc	128(%r15), %xmm4
        aesenc	144(%r15), %xmm4
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last
        aesenc	%xmm9, %xmm4
        aesenc	176(%r15), %xmm4
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last
        aesenc	%xmm9, %xmm4
        aesenc	208(%r15), %xmm4
        movdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_aesenc_avx_last:
        aesenclast	%xmm9, %xmm4
        subq	$16, %rsp
        xorl	%ecx, %ecx
        movdqu	%xmm4, (%rsp)
L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, (%rsi,%rbx,1)
        movb	%r13b, (%rsp,%rcx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_loop
        xorq	%r13, %r13
        cmpl	$16, %ecx
        je	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_finish_enc
L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_byte_loop:
        movb	%r13b, (%rsp,%rcx,1)
        incl	%ecx
        cmpl	$16, %ecx
        jl	L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_byte_loop
L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_finish_enc:
        movdqu	(%rsp), %xmm4
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        pxor	%xmm4, %xmm6
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
L_AES_GCM_encrypt_aesni_aesenc_last15_enc_avx_done:
L_AES_GCM_encrypt_aesni_done_enc:
        movl	%r9d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        pinsrq	$0x00, %rdx, %xmm0
        pinsrq	$0x01, %rcx, %xmm0
        pxor	%xmm0, %xmm6
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm6
        movdqu	144(%rsp), %xmm0
        pxor	%xmm6, %xmm0
        cmpl	$16, %r14d
        je	L_AES_GCM_encrypt_aesni_store_tag_16
        xorq	%rcx, %rcx
        movdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_aesni_store_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        movb	%r13b, (%r8,%rcx,1)
        incl	%ecx
        cmpl	%r14d, %ecx
        jne	L_AES_GCM_encrypt_aesni_store_tag_loop
        jmp	L_AES_GCM_encrypt_aesni_store_tag_done
L_AES_GCM_encrypt_aesni_store_tag_16:
        movdqu	%xmm0, (%r8)
L_AES_GCM_encrypt_aesni_store_tag_done:
        addq	$0xa0, %rsp
        popq	%r15
        popq	%r14
        popq	%rbx
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_aesni,.-AES_GCM_encrypt_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_aesni
.type	AES_GCM_decrypt_aesni,@function
.align	16
AES_GCM_decrypt_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_aesni
.p2align	4
_AES_GCM_decrypt_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%rbx
        pushq	%r14
        pushq	%r15
        pushq	%rbp
        movq	%rdx, %r12
        movq	%rcx, %rax
        movl	56(%rsp), %r11d
        movl	64(%rsp), %ebx
        movl	72(%rsp), %r14d
        movq	80(%rsp), %r15
        movl	88(%rsp), %r10d
        movq	96(%rsp), %rbp
        subq	$0xa8, %rsp
        pxor	%xmm4, %xmm4
        pxor	%xmm6, %xmm6
        cmpl	$12, %ebx
        movl	%ebx, %edx
        jne	L_AES_GCM_decrypt_aesni_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        pinsrq	$0x00, (%rax), %xmm4
        pinsrd	$2, 8(%rax), %xmm4
        pinsrd	$3, %ecx, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        movdqa	%xmm4, %xmm1
        movdqa	(%r15), %xmm5
        pxor	%xmm5, %xmm1
        movdqa	16(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	32(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	48(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	64(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	80(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	96(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	112(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	128(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	144(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm7
        jl	L_AES_GCM_decrypt_aesni_calc_iv_12_last
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	176(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm7
        jl	L_AES_GCM_decrypt_aesni_calc_iv_12_last
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	208(%r15), %xmm7
        aesenc	%xmm7, %xmm5
        aesenc	%xmm7, %xmm1
        movdqa	224(%r15), %xmm7
L_AES_GCM_decrypt_aesni_calc_iv_12_last:
        aesenclast	%xmm7, %xmm5
        aesenclast	%xmm7, %xmm1
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        movdqu	%xmm1, 144(%rsp)
        jmp	L_AES_GCM_decrypt_aesni_iv_done
L_AES_GCM_decrypt_aesni_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        movdqa	(%r15), %xmm5
        aesenc	16(%r15), %xmm5
        aesenc	32(%r15), %xmm5
        aesenc	48(%r15), %xmm5
        aesenc	64(%r15), %xmm5
        aesenc	80(%r15), %xmm5
        aesenc	96(%r15), %xmm5
        aesenc	112(%r15), %xmm5
        aesenc	128(%r15), %xmm5
        aesenc	144(%r15), %xmm5
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm9, %xmm5
        aesenc	176(%r15), %xmm5
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm9, %xmm5
        aesenc	208(%r15), %xmm5
        movdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_aesni_calc_iv_1_aesenc_avx_last:
        aesenclast	%xmm9, %xmm5
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_decrypt_aesni_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_aesni_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_aesni_calc_iv_16_loop:
        movdqu	(%rax,%rcx,1), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_aesni_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_aesni_calc_iv_done
L_AES_GCM_decrypt_aesni_calc_iv_lt16:
        subq	$16, %rsp
        pxor	%xmm8, %xmm8
        xorl	%ebx, %ebx
        movdqu	%xmm8, (%rsp)
L_AES_GCM_decrypt_aesni_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_aesni_calc_iv_loop
        movdqu	(%rsp), %xmm8
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
L_AES_GCM_decrypt_aesni_calc_iv_done:
        # T = Encrypt counter
        pxor	%xmm0, %xmm0
        shll	$3, %edx
        pinsrq	$0x00, %rdx, %xmm0
        pxor	%xmm0, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm7
        por	%xmm1, %xmm4
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        #   Encrypt counter
        movdqa	(%r15), %xmm8
        pxor	%xmm4, %xmm8
        aesenc	16(%r15), %xmm8
        aesenc	32(%r15), %xmm8
        aesenc	48(%r15), %xmm8
        aesenc	64(%r15), %xmm8
        aesenc	80(%r15), %xmm8
        aesenc	96(%r15), %xmm8
        aesenc	112(%r15), %xmm8
        aesenc	128(%r15), %xmm8
        aesenc	144(%r15), %xmm8
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%r15), %xmm8
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%r15), %xmm8
        movdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_aesni_calc_iv_2_aesenc_avx_last:
        aesenclast	%xmm9, %xmm8
        movdqu	%xmm8, 144(%rsp)
L_AES_GCM_decrypt_aesni_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_decrypt_aesni_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_aesni_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_aesni_calc_aad_16_loop:
        movdqu	(%r12,%rcx,1), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        pshufd	$0x4e, %xmm6, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm6, %xmm3
        pclmulqdq	$0x00, %xmm6, %xmm0
        pxor	%xmm6, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm6, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm6
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm6
        por	%xmm0, %xmm7
        por	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_aesni_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_aesni_calc_aad_done
L_AES_GCM_decrypt_aesni_calc_aad_lt16:
        subq	$16, %rsp
        pxor	%xmm8, %xmm8
        xorl	%ebx, %ebx
        movdqu	%xmm8, (%rsp)
L_AES_GCM_decrypt_aesni_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_aesni_calc_aad_loop
        movdqu	(%rsp), %xmm8
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        pshufd	$0x4e, %xmm6, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm6, %xmm3
        pclmulqdq	$0x00, %xmm6, %xmm0
        pxor	%xmm6, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm7
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm7
        pxor	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm6, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm7
        pslld	$0x01, %xmm6
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm6
        por	%xmm0, %xmm7
        por	%xmm1, %xmm6
        movdqa	%xmm7, %xmm0
        movdqa	%xmm7, %xmm1
        movdqa	%xmm7, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm7
        movdqa	%xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm7, %xmm2
        pxor	%xmm2, %xmm6
L_AES_GCM_decrypt_aesni_calc_aad_done:
        # Calculate counter and H
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm4
        movdqa	%xmm5, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm4
        movdqa	%xmm5, %xmm8
        movdqu	%xmm4, 128(%rsp)
        psrlq	$63, %xmm9
        psllq	$0x01, %xmm8
        pslldq	$8, %xmm9
        por	%xmm9, %xmm8
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm8, %xmm5
        xorl	%ebx, %ebx
        cmpl	$0x80, %r9d
        movl	%r9d, %r13d
        jl	L_AES_GCM_decrypt_aesni_done_128
        andl	$0xffffff80, %r13d
        movdqa	%xmm6, %xmm2
        # H ^ 1
        movdqu	%xmm5, (%rsp)
        # H ^ 2
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm5, %xmm10
        movdqa	%xmm5, %xmm11
        movdqa	%xmm5, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm5, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm0
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm0
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm0
        movdqu	%xmm0, 16(%rsp)
        # H ^ 3
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm1
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm1
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm1
        movdqu	%xmm1, 32(%rsp)
        # H ^ 4
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm3
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm3
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm3
        movdqu	%xmm3, 48(%rsp)
        # H ^ 5
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 64(%rsp)
        # H ^ 6
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 80(%rsp)
        # H ^ 7
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 96(%rsp)
        # H ^ 8
        pshufd	$0x4e, %xmm3, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm3, %xmm11
        pclmulqdq	$0x00, %xmm3, %xmm8
        pxor	%xmm3, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 112(%rsp)
L_AES_GCM_decrypt_aesni_ghash_128:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        movdqu	128(%rsp), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%r15), %xmm7
        movdqu	%xmm0, 128(%rsp)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqu	112(%rsp), %xmm7
        movdqu	(%rcx), %xmm0
        aesenc	16(%r15), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        pxor	%xmm2, %xmm0
        pshufd	$0x4e, %xmm7, %xmm1
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm7, %xmm1
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm3
        pclmulqdq	$0x11, %xmm7, %xmm3
        aesenc	16(%r15), %xmm9
        aesenc	16(%r15), %xmm10
        movdqa	%xmm0, %xmm2
        pclmulqdq	$0x00, %xmm7, %xmm2
        aesenc	16(%r15), %xmm11
        aesenc	16(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm1
        aesenc	16(%r15), %xmm13
        aesenc	16(%r15), %xmm14
        aesenc	16(%r15), %xmm15
        pxor	%xmm2, %xmm1
        pxor	%xmm3, %xmm1
        movdqu	96(%rsp), %xmm7
        movdqu	16(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	32(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	32(%r15), %xmm9
        aesenc	32(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	32(%r15), %xmm11
        aesenc	32(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	32(%r15), %xmm13
        aesenc	32(%r15), %xmm14
        aesenc	32(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	80(%rsp), %xmm7
        movdqu	32(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	48(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	48(%r15), %xmm9
        aesenc	48(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	48(%r15), %xmm11
        aesenc	48(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	48(%r15), %xmm13
        aesenc	48(%r15), %xmm14
        aesenc	48(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	64(%rsp), %xmm7
        movdqu	48(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	64(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	64(%r15), %xmm9
        aesenc	64(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	64(%r15), %xmm11
        aesenc	64(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	64(%r15), %xmm13
        aesenc	64(%r15), %xmm14
        aesenc	64(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	48(%rsp), %xmm7
        movdqu	64(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	80(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	80(%r15), %xmm9
        aesenc	80(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	80(%r15), %xmm11
        aesenc	80(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	80(%r15), %xmm13
        aesenc	80(%r15), %xmm14
        aesenc	80(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	32(%rsp), %xmm7
        movdqu	80(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	96(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	96(%r15), %xmm9
        aesenc	96(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	96(%r15), %xmm11
        aesenc	96(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	96(%r15), %xmm13
        aesenc	96(%r15), %xmm14
        aesenc	96(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	16(%rsp), %xmm7
        movdqu	96(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	112(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	112(%r15), %xmm9
        aesenc	112(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	112(%r15), %xmm11
        aesenc	112(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	112(%r15), %xmm13
        aesenc	112(%r15), %xmm14
        aesenc	112(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	(%rsp), %xmm7
        movdqu	112(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	128(%r15), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	128(%r15), %xmm9
        aesenc	128(%r15), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	128(%r15), %xmm11
        aesenc	128(%r15), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	128(%r15), %xmm13
        aesenc	128(%r15), %xmm14
        aesenc	128(%r15), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqa	%xmm1, %xmm5
        psrldq	$8, %xmm1
        pslldq	$8, %xmm5
        aesenc	144(%r15), %xmm8
        pxor	%xmm5, %xmm2
        pxor	%xmm1, %xmm3
        movdqa	%xmm2, %xmm7
        movdqa	%xmm2, %xmm4
        movdqa	%xmm2, %xmm5
        aesenc	144(%r15), %xmm9
        pslld	$31, %xmm7
        pslld	$30, %xmm4
        pslld	$25, %xmm5
        aesenc	144(%r15), %xmm10
        pxor	%xmm4, %xmm7
        pxor	%xmm5, %xmm7
        aesenc	144(%r15), %xmm11
        movdqa	%xmm7, %xmm4
        pslldq	$12, %xmm7
        psrldq	$4, %xmm4
        aesenc	144(%r15), %xmm12
        pxor	%xmm7, %xmm2
        movdqa	%xmm2, %xmm5
        movdqa	%xmm2, %xmm1
        movdqa	%xmm2, %xmm0
        aesenc	144(%r15), %xmm13
        psrld	$0x01, %xmm5
        psrld	$2, %xmm1
        psrld	$7, %xmm0
        aesenc	144(%r15), %xmm14
        pxor	%xmm1, %xmm5
        pxor	%xmm0, %xmm5
        aesenc	144(%r15), %xmm15
        pxor	%xmm4, %xmm5
        pxor	%xmm5, %xmm2
        pxor	%xmm3, %xmm2
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm7
        jl	L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm7
        jl	L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%r15), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%r15), %xmm7
L_AES_GCM_decrypt_aesni_aesenc_128_ghash_avx_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%rcx), %xmm0
        movdqu	16(%rcx), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%rdx)
        movdqu	%xmm9, 16(%rdx)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%rcx), %xmm0
        movdqu	48(%rcx), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%rdx)
        movdqu	%xmm11, 48(%rdx)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%rcx), %xmm0
        movdqu	80(%rcx), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%rdx)
        movdqu	%xmm13, 80(%rdx)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%rcx), %xmm0
        movdqu	112(%rcx), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%rdx)
        movdqu	%xmm15, 112(%rdx)
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_aesni_ghash_128
        movdqa	%xmm2, %xmm6
        movdqu	(%rsp), %xmm5
L_AES_GCM_decrypt_aesni_done_128:
        movl	%r9d, %edx
        cmpl	%edx, %ebx
        jge	L_AES_GCM_decrypt_aesni_done_dec
        movl	%r9d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_decrypt_aesni_last_block_done
L_AES_GCM_decrypt_aesni_last_block_start:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        movdqu	(%rcx), %xmm1
        movdqa	%xmm5, %xmm0
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm1
        pxor	%xmm6, %xmm1
        movdqu	128(%rsp), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%r15), %xmm8
        movdqu	%xmm9, 128(%rsp)
        movdqa	%xmm1, %xmm10
        pclmulqdq	$16, %xmm0, %xmm10
        aesenc	16(%r15), %xmm8
        aesenc	32(%r15), %xmm8
        movdqa	%xmm1, %xmm11
        pclmulqdq	$0x01, %xmm0, %xmm11
        aesenc	48(%r15), %xmm8
        aesenc	64(%r15), %xmm8
        movdqa	%xmm1, %xmm12
        pclmulqdq	$0x00, %xmm0, %xmm12
        aesenc	80(%r15), %xmm8
        movdqa	%xmm1, %xmm1
        pclmulqdq	$0x11, %xmm0, %xmm1
        aesenc	96(%r15), %xmm8
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm2
        psrldq	$8, %xmm10
        pslldq	$8, %xmm2
        aesenc	112(%r15), %xmm8
        movdqa	%xmm1, %xmm3
        pxor	%xmm12, %xmm2
        pxor	%xmm10, %xmm3
        movdqa	L_aes_gcm_mod2_128(%rip), %xmm0
        movdqa	%xmm2, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	128(%r15), %xmm8
        pshufd	$0x4e, %xmm2, %xmm10
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	144(%r15), %xmm8
        pshufd	$0x4e, %xmm10, %xmm6
        pxor	%xmm11, %xmm6
        pxor	%xmm3, %xmm6
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%r15), %xmm8
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%r15), %xmm8
        movdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_aesni_aesenc_gfmul_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_aesni_last_block_start
L_AES_GCM_decrypt_aesni_last_block_done:
        movl	%r9d, %ecx
        movl	%ecx, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_done
        movdqu	128(%rsp), %xmm4
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm4
        pxor	(%r15), %xmm4
        aesenc	16(%r15), %xmm4
        aesenc	32(%r15), %xmm4
        aesenc	48(%r15), %xmm4
        aesenc	64(%r15), %xmm4
        aesenc	80(%r15), %xmm4
        aesenc	96(%r15), %xmm4
        aesenc	112(%r15), %xmm4
        aesenc	128(%r15), %xmm4
        aesenc	144(%r15), %xmm4
        cmpl	$11, %r10d
        movdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last
        aesenc	%xmm9, %xmm4
        aesenc	176(%r15), %xmm4
        cmpl	$13, %r10d
        movdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last
        aesenc	%xmm9, %xmm4
        aesenc	208(%r15), %xmm4
        movdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_aesenc_avx_last:
        aesenclast	%xmm9, %xmm4
        subq	$32, %rsp
        xorl	%ecx, %ecx
        movdqu	%xmm4, (%rsp)
        pxor	%xmm0, %xmm0
        movdqu	%xmm0, 16(%rsp)
L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        movb	%r13b, 16(%rsp,%rcx,1)
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, (%rsi,%rbx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_loop
        movdqu	16(%rsp), %xmm4
        addq	$32, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        pxor	%xmm4, %xmm6
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
L_AES_GCM_decrypt_aesni_aesenc_last15_dec_avx_done:
L_AES_GCM_decrypt_aesni_done_dec:
        movl	%r9d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        pinsrq	$0x00, %rdx, %xmm0
        pinsrq	$0x01, %rcx, %xmm0
        pxor	%xmm0, %xmm6
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm6
        movdqu	144(%rsp), %xmm0
        pxor	%xmm6, %xmm0
        cmpl	$16, %r14d
        je	L_AES_GCM_decrypt_aesni_cmp_tag_16
        subq	$16, %rsp
        xorq	%rcx, %rcx
        xorq	%rbx, %rbx
        movdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_aesni_cmp_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        xorb	(%r8,%rcx,1), %r13b
        orb	%r13b, %bl
        incl	%ecx
        cmpl	%r14d, %ecx
        jne	L_AES_GCM_decrypt_aesni_cmp_tag_loop
        cmpb	$0x00, %bl
        sete	%bl
        addq	$16, %rsp
        xorq	%rcx, %rcx
        jmp	L_AES_GCM_decrypt_aesni_cmp_tag_done
L_AES_GCM_decrypt_aesni_cmp_tag_16:
        movdqu	(%r8), %xmm1
        pcmpeqb	%xmm1, %xmm0
        pmovmskb	%xmm0, %rdx
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%ebx, %ebx
        cmpl	$0xffff, %edx
        sete	%bl
L_AES_GCM_decrypt_aesni_cmp_tag_done:
        movl	%ebx, (%rbp)
        addq	$0xa8, %rsp
        popq	%rbp
        popq	%r15
        popq	%r14
        popq	%rbx
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_aesni,.-AES_GCM_decrypt_aesni
#endif /* __APPLE__ */
#ifdef WOLFSSL_AESGCM_STREAM
#ifndef __APPLE__
.text
.globl	AES_GCM_init_aesni
.type	AES_GCM_init_aesni,@function
.align	16
AES_GCM_init_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_init_aesni
.p2align	4
_AES_GCM_init_aesni:
#endif /* __APPLE__ */
        pushq	%r12
        pushq	%r13
        pushq	%r14
        movq	%rdx, %r10
        movl	%ecx, %r11d
        movq	32(%rsp), %rax
        subq	$16, %rsp
        pxor	%xmm4, %xmm4
        movl	%r11d, %edx
        cmpl	$12, %edx
        jne	L_AES_GCM_init_aesni_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        pinsrq	$0x00, (%r10), %xmm4
        pinsrd	$2, 8(%r10), %xmm4
        pinsrd	$3, %ecx, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        movdqa	%xmm4, %xmm1
        movdqa	(%rdi), %xmm5
        pxor	%xmm5, %xmm1
        movdqa	16(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	32(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	48(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	64(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	80(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	96(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	112(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	128(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	144(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm6
        jl	L_AES_GCM_init_aesni_calc_iv_12_last
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	176(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm6
        jl	L_AES_GCM_init_aesni_calc_iv_12_last
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	208(%rdi), %xmm6
        aesenc	%xmm6, %xmm5
        aesenc	%xmm6, %xmm1
        movdqa	224(%rdi), %xmm6
L_AES_GCM_init_aesni_calc_iv_12_last:
        aesenclast	%xmm6, %xmm5
        aesenclast	%xmm6, %xmm1
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        movdqu	%xmm1, %xmm15
        jmp	L_AES_GCM_init_aesni_iv_done
L_AES_GCM_init_aesni_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        movdqa	(%rdi), %xmm5
        aesenc	16(%rdi), %xmm5
        aesenc	32(%rdi), %xmm5
        aesenc	48(%rdi), %xmm5
        aesenc	64(%rdi), %xmm5
        aesenc	80(%rdi), %xmm5
        aesenc	96(%rdi), %xmm5
        aesenc	112(%rdi), %xmm5
        aesenc	128(%rdi), %xmm5
        aesenc	144(%rdi), %xmm5
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm8
        jl	L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm8, %xmm5
        aesenc	176(%rdi), %xmm5
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm8
        jl	L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last
        aesenc	%xmm8, %xmm5
        aesenc	208(%rdi), %xmm5
        movdqa	224(%rdi), %xmm8
L_AES_GCM_init_aesni_calc_iv_1_aesenc_avx_last:
        aesenclast	%xmm8, %xmm5
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_init_aesni_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_init_aesni_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_init_aesni_calc_iv_16_loop:
        movdqu	(%r10,%rcx,1), %xmm7
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm7
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm6
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm6
        pxor	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm6
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm6
        por	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm6, %xmm1
        movdqa	%xmm6, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm6
        movdqa	%xmm6, %xmm2
        movdqa	%xmm6, %xmm3
        movdqa	%xmm6, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm6, %xmm2
        pxor	%xmm2, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_aesni_calc_iv_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_init_aesni_calc_iv_done
L_AES_GCM_init_aesni_calc_iv_lt16:
        subq	$16, %rsp
        pxor	%xmm7, %xmm7
        xorl	%r13d, %r13d
        movdqu	%xmm7, (%rsp)
L_AES_GCM_init_aesni_calc_iv_loop:
        movzbl	(%r10,%rcx,1), %r12d
        movb	%r12b, (%rsp,%r13,1)
        incl	%ecx
        incl	%r13d
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_aesni_calc_iv_loop
        movdqu	(%rsp), %xmm7
        addq	$16, %rsp
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm7
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm6
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm6
        pxor	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm6
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm6
        por	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm6, %xmm1
        movdqa	%xmm6, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm6
        movdqa	%xmm6, %xmm2
        movdqa	%xmm6, %xmm3
        movdqa	%xmm6, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm6, %xmm2
        pxor	%xmm2, %xmm4
L_AES_GCM_init_aesni_calc_iv_done:
        # T = Encrypt counter
        pxor	%xmm0, %xmm0
        shll	$3, %edx
        pinsrq	$0x00, %rdx, %xmm0
        pxor	%xmm0, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm6
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm6
        pxor	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm6
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm6
        por	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm6, %xmm1
        movdqa	%xmm6, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm6
        movdqa	%xmm6, %xmm2
        movdqa	%xmm6, %xmm3
        movdqa	%xmm6, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm6, %xmm2
        pxor	%xmm2, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        #   Encrypt counter
        movdqa	(%rdi), %xmm7
        pxor	%xmm4, %xmm7
        aesenc	16(%rdi), %xmm7
        aesenc	32(%rdi), %xmm7
        aesenc	48(%rdi), %xmm7
        aesenc	64(%rdi), %xmm7
        aesenc	80(%rdi), %xmm7
        aesenc	96(%rdi), %xmm7
        aesenc	112(%rdi), %xmm7
        aesenc	128(%rdi), %xmm7
        aesenc	144(%rdi), %xmm7
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm8
        jl	L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm8, %xmm7
        aesenc	176(%rdi), %xmm7
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm8
        jl	L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last
        aesenc	%xmm8, %xmm7
        aesenc	208(%rdi), %xmm7
        movdqa	224(%rdi), %xmm8
L_AES_GCM_init_aesni_calc_iv_2_aesenc_avx_last:
        aesenclast	%xmm8, %xmm7
        movdqu	%xmm7, %xmm15
L_AES_GCM_init_aesni_iv_done:
        movdqa	%xmm15, (%rax)
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm4
        paddd	L_aes_gcm_one(%rip), %xmm4
        movdqa	%xmm5, (%r8)
        movdqa	%xmm4, (%r9)
        addq	$16, %rsp
        popq	%r14
        popq	%r13
        popq	%r12
        repz retq
#ifndef __APPLE__
.size	AES_GCM_init_aesni,.-AES_GCM_init_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_aad_update_aesni
.type	AES_GCM_aad_update_aesni,@function
.align	16
AES_GCM_aad_update_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_aad_update_aesni
.p2align	4
_AES_GCM_aad_update_aesni:
#endif /* __APPLE__ */
        movq	%rcx, %rax
        movdqa	(%rdx), %xmm5
        movdqa	(%rax), %xmm6
        xorl	%ecx, %ecx
L_AES_GCM_aad_update_aesni_16_loop:
        movdqu	(%rdi,%rcx,1), %xmm7
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm7
        pxor	%xmm7, %xmm5
        pshufd	$0x4e, %xmm5, %xmm1
        pshufd	$0x4e, %xmm6, %xmm2
        movdqa	%xmm6, %xmm3
        movdqa	%xmm6, %xmm0
        pclmulqdq	$0x11, %xmm5, %xmm3
        pclmulqdq	$0x00, %xmm5, %xmm0
        pxor	%xmm5, %xmm1
        pxor	%xmm6, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm4
        movdqa	%xmm3, %xmm5
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm5
        movdqa	%xmm4, %xmm0
        movdqa	%xmm5, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm4
        pslld	$0x01, %xmm5
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm5
        por	%xmm0, %xmm4
        por	%xmm1, %xmm5
        movdqa	%xmm4, %xmm0
        movdqa	%xmm4, %xmm1
        movdqa	%xmm4, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm4
        movdqa	%xmm4, %xmm2
        movdqa	%xmm4, %xmm3
        movdqa	%xmm4, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm4, %xmm2
        pxor	%xmm2, %xmm5
        addl	$16, %ecx
        cmpl	%esi, %ecx
        jl	L_AES_GCM_aad_update_aesni_16_loop
        movdqa	%xmm5, (%rdx)
        repz retq
#ifndef __APPLE__
.size	AES_GCM_aad_update_aesni,.-AES_GCM_aad_update_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_block_aesni
.type	AES_GCM_encrypt_block_aesni,@function
.align	16
AES_GCM_encrypt_block_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_block_aesni
.p2align	4
_AES_GCM_encrypt_block_aesni:
#endif /* __APPLE__ */
        movq	%rdx, %r10
        movq	%rcx, %r11
        movdqu	(%r8), %xmm0
        movdqa	%xmm0, %xmm1
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm0
        paddd	L_aes_gcm_one(%rip), %xmm1
        pxor	(%rdi), %xmm0
        movdqu	%xmm1, (%r8)
        aesenc	16(%rdi), %xmm0
        aesenc	32(%rdi), %xmm0
        aesenc	48(%rdi), %xmm0
        aesenc	64(%rdi), %xmm0
        aesenc	80(%rdi), %xmm0
        aesenc	96(%rdi), %xmm0
        aesenc	112(%rdi), %xmm0
        aesenc	128(%rdi), %xmm0
        aesenc	144(%rdi), %xmm0
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm1, %xmm0
        aesenc	176(%rdi), %xmm0
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm1, %xmm0
        aesenc	208(%rdi), %xmm0
        movdqa	224(%rdi), %xmm1
L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last:
        aesenclast	%xmm1, %xmm0
        movdqu	(%r11), %xmm1
        pxor	%xmm1, %xmm0
        movdqu	%xmm0, (%r10)
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_block_aesni,.-AES_GCM_encrypt_block_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_ghash_block_aesni
.type	AES_GCM_ghash_block_aesni,@function
.align	16
AES_GCM_ghash_block_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_ghash_block_aesni
.p2align	4
_AES_GCM_ghash_block_aesni:
#endif /* __APPLE__ */
        movdqa	(%rsi), %xmm4
        movdqa	(%rdx), %xmm5
        movdqu	(%rdi), %xmm7
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm7
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm4, %xmm1
        pshufd	$0x4e, %xmm5, %xmm2
        movdqa	%xmm5, %xmm3
        movdqa	%xmm5, %xmm0
        pclmulqdq	$0x11, %xmm4, %xmm3
        pclmulqdq	$0x00, %xmm4, %xmm0
        pxor	%xmm4, %xmm1
        pxor	%xmm5, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm6
        movdqa	%xmm3, %xmm4
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm6
        pxor	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm4, %xmm1
        psrld	$31, %xmm0
        psrld	$31, %xmm1
        pslld	$0x01, %xmm6
        pslld	$0x01, %xmm4
        movdqa	%xmm0, %xmm2
        pslldq	$4, %xmm0
        psrldq	$12, %xmm2
        pslldq	$4, %xmm1
        por	%xmm2, %xmm4
        por	%xmm0, %xmm6
        por	%xmm1, %xmm4
        movdqa	%xmm6, %xmm0
        movdqa	%xmm6, %xmm1
        movdqa	%xmm6, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm6
        movdqa	%xmm6, %xmm2
        movdqa	%xmm6, %xmm3
        movdqa	%xmm6, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm6, %xmm2
        pxor	%xmm2, %xmm4
        movdqa	%xmm4, (%rsi)
        repz retq
#ifndef __APPLE__
.size	AES_GCM_ghash_block_aesni,.-AES_GCM_ghash_block_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_update_aesni
.type	AES_GCM_encrypt_update_aesni,@function
.align	16
AES_GCM_encrypt_update_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_update_aesni
.p2align	4
_AES_GCM_encrypt_update_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	32(%rsp), %rax
        movq	40(%rsp), %r12
        subq	$0xa0, %rsp
        movdqa	(%r9), %xmm6
        movdqa	(%rax), %xmm5
        movdqa	%xmm5, %xmm9
        movdqa	%xmm5, %xmm8
        psrlq	$63, %xmm9
        psllq	$0x01, %xmm8
        pslldq	$8, %xmm9
        por	%xmm9, %xmm8
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm8, %xmm5
        xorq	%r14, %r14
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_encrypt_update_aesni_done_128
        andl	$0xffffff80, %r13d
        movdqa	%xmm6, %xmm2
        # H ^ 1
        movdqu	%xmm5, (%rsp)
        # H ^ 2
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm5, %xmm10
        movdqa	%xmm5, %xmm11
        movdqa	%xmm5, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm5, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm0
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm0
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm0
        movdqu	%xmm0, 16(%rsp)
        # H ^ 3
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm1
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm1
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm1
        movdqu	%xmm1, 32(%rsp)
        # H ^ 4
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm3
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm3
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm3
        movdqu	%xmm3, 48(%rsp)
        # H ^ 5
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 64(%rsp)
        # H ^ 6
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 80(%rsp)
        # H ^ 7
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 96(%rsp)
        # H ^ 8
        pshufd	$0x4e, %xmm3, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm3, %xmm11
        pclmulqdq	$0x00, %xmm3, %xmm8
        pxor	%xmm3, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 112(%rsp)
        # First 128 bytes of input
        movdqu	(%r12), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%rdi), %xmm7
        movdqu	%xmm0, (%r12)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqa	16(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	32(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	48(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	64(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	80(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	96(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	112(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	128(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	144(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_aesni_enc_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_aesni_enc_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_aesni_enc_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%r11), %xmm0
        movdqu	16(%r11), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%r10)
        movdqu	%xmm9, 16(%r10)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%r11), %xmm0
        movdqu	48(%r11), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%r10)
        movdqu	%xmm11, 48(%r10)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%r11), %xmm0
        movdqu	80(%r11), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%r10)
        movdqu	%xmm13, 80(%r10)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%r11), %xmm0
        movdqu	112(%r11), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%r10)
        movdqu	%xmm15, 112(%r10)
        cmpl	$0x80, %r13d
        movl	$0x80, %r14d
        jle	L_AES_GCM_encrypt_update_aesni_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_update_aesni_ghash_128:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        movdqu	(%r12), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%rdi), %xmm7
        movdqu	%xmm0, (%r12)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqu	112(%rsp), %xmm7
        movdqu	-128(%rdx), %xmm0
        aesenc	16(%rdi), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        pxor	%xmm2, %xmm0
        pshufd	$0x4e, %xmm7, %xmm1
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm7, %xmm1
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm3
        pclmulqdq	$0x11, %xmm7, %xmm3
        aesenc	16(%rdi), %xmm9
        aesenc	16(%rdi), %xmm10
        movdqa	%xmm0, %xmm2
        pclmulqdq	$0x00, %xmm7, %xmm2
        aesenc	16(%rdi), %xmm11
        aesenc	16(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm1
        aesenc	16(%rdi), %xmm13
        aesenc	16(%rdi), %xmm14
        aesenc	16(%rdi), %xmm15
        pxor	%xmm2, %xmm1
        pxor	%xmm3, %xmm1
        movdqu	96(%rsp), %xmm7
        movdqu	-112(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	32(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	32(%rdi), %xmm9
        aesenc	32(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	32(%rdi), %xmm11
        aesenc	32(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	32(%rdi), %xmm13
        aesenc	32(%rdi), %xmm14
        aesenc	32(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	80(%rsp), %xmm7
        movdqu	-96(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	48(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	48(%rdi), %xmm9
        aesenc	48(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	48(%rdi), %xmm11
        aesenc	48(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	48(%rdi), %xmm13
        aesenc	48(%rdi), %xmm14
        aesenc	48(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	64(%rsp), %xmm7
        movdqu	-80(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	64(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	64(%rdi), %xmm9
        aesenc	64(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	64(%rdi), %xmm11
        aesenc	64(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	64(%rdi), %xmm13
        aesenc	64(%rdi), %xmm14
        aesenc	64(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	48(%rsp), %xmm7
        movdqu	-64(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	80(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	80(%rdi), %xmm9
        aesenc	80(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	80(%rdi), %xmm11
        aesenc	80(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	80(%rdi), %xmm13
        aesenc	80(%rdi), %xmm14
        aesenc	80(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	32(%rsp), %xmm7
        movdqu	-48(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	96(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	96(%rdi), %xmm9
        aesenc	96(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	96(%rdi), %xmm11
        aesenc	96(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	96(%rdi), %xmm13
        aesenc	96(%rdi), %xmm14
        aesenc	96(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	16(%rsp), %xmm7
        movdqu	-32(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	112(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	112(%rdi), %xmm9
        aesenc	112(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	112(%rdi), %xmm11
        aesenc	112(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	112(%rdi), %xmm13
        aesenc	112(%rdi), %xmm14
        aesenc	112(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	(%rsp), %xmm7
        movdqu	-16(%rdx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	128(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	128(%rdi), %xmm9
        aesenc	128(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	128(%rdi), %xmm11
        aesenc	128(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	128(%rdi), %xmm13
        aesenc	128(%rdi), %xmm14
        aesenc	128(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqa	%xmm1, %xmm5
        psrldq	$8, %xmm1
        pslldq	$8, %xmm5
        aesenc	144(%rdi), %xmm8
        pxor	%xmm5, %xmm2
        pxor	%xmm1, %xmm3
        movdqa	%xmm2, %xmm7
        movdqa	%xmm2, %xmm4
        movdqa	%xmm2, %xmm5
        aesenc	144(%rdi), %xmm9
        pslld	$31, %xmm7
        pslld	$30, %xmm4
        pslld	$25, %xmm5
        aesenc	144(%rdi), %xmm10
        pxor	%xmm4, %xmm7
        pxor	%xmm5, %xmm7
        aesenc	144(%rdi), %xmm11
        movdqa	%xmm7, %xmm4
        pslldq	$12, %xmm7
        psrldq	$4, %xmm4
        aesenc	144(%rdi), %xmm12
        pxor	%xmm7, %xmm2
        movdqa	%xmm2, %xmm5
        movdqa	%xmm2, %xmm1
        movdqa	%xmm2, %xmm0
        aesenc	144(%rdi), %xmm13
        psrld	$0x01, %xmm5
        psrld	$2, %xmm1
        psrld	$7, %xmm0
        aesenc	144(%rdi), %xmm14
        pxor	%xmm1, %xmm5
        pxor	%xmm0, %xmm5
        aesenc	144(%rdi), %xmm15
        pxor	%xmm4, %xmm5
        pxor	%xmm5, %xmm2
        pxor	%xmm3, %xmm2
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_aesni_aesenc_128_ghash_avx_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%rcx), %xmm0
        movdqu	16(%rcx), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%rdx)
        movdqu	%xmm9, 16(%rdx)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%rcx), %xmm0
        movdqu	48(%rcx), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%rdx)
        movdqu	%xmm11, 48(%rdx)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%rcx), %xmm0
        movdqu	80(%rcx), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%rdx)
        movdqu	%xmm13, 80(%rdx)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%rcx), %xmm0
        movdqu	112(%rcx), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%rdx)
        movdqu	%xmm15, 112(%rdx)
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_aesni_ghash_128
L_AES_GCM_encrypt_update_aesni_end_128:
        movdqa	L_aes_gcm_bswap_mask(%rip), %xmm4
        pshufb	%xmm4, %xmm8
        pshufb	%xmm4, %xmm9
        pshufb	%xmm4, %xmm10
        pshufb	%xmm4, %xmm11
        pxor	%xmm2, %xmm8
        pshufb	%xmm4, %xmm12
        pshufb	%xmm4, %xmm13
        pshufb	%xmm4, %xmm14
        pshufb	%xmm4, %xmm15
        movdqu	112(%rsp), %xmm7
        pshufd	$0x4e, %xmm8, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm8, %xmm3
        pclmulqdq	$0x00, %xmm8, %xmm0
        pxor	%xmm8, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        movdqa	%xmm0, %xmm4
        movdqa	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	96(%rsp), %xmm7
        pshufd	$0x4e, %xmm9, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm9, %xmm3
        pclmulqdq	$0x00, %xmm9, %xmm0
        pxor	%xmm9, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	80(%rsp), %xmm7
        pshufd	$0x4e, %xmm10, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm10, %xmm3
        pclmulqdq	$0x00, %xmm10, %xmm0
        pxor	%xmm10, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	64(%rsp), %xmm7
        pshufd	$0x4e, %xmm11, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm11, %xmm3
        pclmulqdq	$0x00, %xmm11, %xmm0
        pxor	%xmm11, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	48(%rsp), %xmm7
        pshufd	$0x4e, %xmm12, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm12, %xmm3
        pclmulqdq	$0x00, %xmm12, %xmm0
        pxor	%xmm12, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	32(%rsp), %xmm7
        pshufd	$0x4e, %xmm13, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm13, %xmm3
        pclmulqdq	$0x00, %xmm13, %xmm0
        pxor	%xmm13, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	16(%rsp), %xmm7
        pshufd	$0x4e, %xmm14, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm14, %xmm3
        pclmulqdq	$0x00, %xmm14, %xmm0
        pxor	%xmm14, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqu	(%rsp), %xmm7
        pshufd	$0x4e, %xmm15, %xmm1
        pshufd	$0x4e, %xmm7, %xmm2
        movdqa	%xmm7, %xmm3
        movdqa	%xmm7, %xmm0
        pclmulqdq	$0x11, %xmm15, %xmm3
        pclmulqdq	$0x00, %xmm15, %xmm0
        pxor	%xmm15, %xmm1
        pxor	%xmm7, %xmm2
        pclmulqdq	$0x00, %xmm2, %xmm1
        pxor	%xmm0, %xmm1
        pxor	%xmm3, %xmm1
        movdqa	%xmm1, %xmm2
        pxor	%xmm0, %xmm4
        pxor	%xmm3, %xmm6
        pslldq	$8, %xmm2
        psrldq	$8, %xmm1
        pxor	%xmm2, %xmm4
        pxor	%xmm1, %xmm6
        movdqa	%xmm4, %xmm0
        movdqa	%xmm4, %xmm1
        movdqa	%xmm4, %xmm2
        pslld	$31, %xmm0
        pslld	$30, %xmm1
        pslld	$25, %xmm2
        pxor	%xmm1, %xmm0
        pxor	%xmm2, %xmm0
        movdqa	%xmm0, %xmm1
        psrldq	$4, %xmm1
        pslldq	$12, %xmm0
        pxor	%xmm0, %xmm4
        movdqa	%xmm4, %xmm2
        movdqa	%xmm4, %xmm3
        movdqa	%xmm4, %xmm0
        psrld	$0x01, %xmm2
        psrld	$2, %xmm3
        psrld	$7, %xmm0
        pxor	%xmm3, %xmm2
        pxor	%xmm0, %xmm2
        pxor	%xmm1, %xmm2
        pxor	%xmm4, %xmm2
        pxor	%xmm2, %xmm6
        movdqu	(%rsp), %xmm5
L_AES_GCM_encrypt_update_aesni_done_128:
        movl	%r8d, %edx
        cmpl	%edx, %r14d
        jge	L_AES_GCM_encrypt_update_aesni_done_enc
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_aesni_last_block_done
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        movdqu	(%r12), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%rdi), %xmm8
        movdqu	%xmm9, (%r12)
        aesenc	16(%rdi), %xmm8
        aesenc	32(%rdi), %xmm8
        aesenc	48(%rdi), %xmm8
        aesenc	64(%rdi), %xmm8
        aesenc	80(%rdi), %xmm8
        aesenc	96(%rdi), %xmm8
        aesenc	112(%rdi), %xmm8
        aesenc	128(%rdi), %xmm8
        aesenc	144(%rdi), %xmm8
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%rdi), %xmm8
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%rdi), %xmm8
        movdqa	224(%rdi), %xmm9
L_AES_GCM_encrypt_update_aesni_aesenc_block_aesenc_avx_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_aesni_last_block_ghash
L_AES_GCM_encrypt_update_aesni_last_block_start:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        movdqu	(%r12), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%rdi), %xmm8
        movdqu	%xmm9, (%r12)
        movdqa	%xmm6, %xmm10
        pclmulqdq	$16, %xmm5, %xmm10
        aesenc	16(%rdi), %xmm8
        aesenc	32(%rdi), %xmm8
        movdqa	%xmm6, %xmm11
        pclmulqdq	$0x01, %xmm5, %xmm11
        aesenc	48(%rdi), %xmm8
        aesenc	64(%rdi), %xmm8
        movdqa	%xmm6, %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm12
        aesenc	80(%rdi), %xmm8
        movdqa	%xmm6, %xmm1
        pclmulqdq	$0x11, %xmm5, %xmm1
        aesenc	96(%rdi), %xmm8
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm2
        psrldq	$8, %xmm10
        pslldq	$8, %xmm2
        aesenc	112(%rdi), %xmm8
        movdqa	%xmm1, %xmm3
        pxor	%xmm12, %xmm2
        pxor	%xmm10, %xmm3
        movdqa	L_aes_gcm_mod2_128(%rip), %xmm0
        movdqa	%xmm2, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	128(%rdi), %xmm8
        pshufd	$0x4e, %xmm2, %xmm10
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	144(%rdi), %xmm8
        pshufd	$0x4e, %xmm10, %xmm6
        pxor	%xmm11, %xmm6
        pxor	%xmm3, %xmm6
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%rdi), %xmm8
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%rdi), %xmm8
        movdqa	224(%rdi), %xmm9
L_AES_GCM_encrypt_update_aesni_aesenc_gfmul_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm8
        pxor	%xmm8, %xmm6
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_aesni_last_block_start
L_AES_GCM_encrypt_update_aesni_last_block_ghash:
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm6, %xmm10
        movdqa	%xmm6, %xmm11
        movdqa	%xmm6, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm6, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm6
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm6
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm6
L_AES_GCM_encrypt_update_aesni_last_block_done:
L_AES_GCM_encrypt_update_aesni_done_enc:
        movdqa	%xmm6, (%r9)
        addq	$0xa0, %rsp
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_update_aesni,.-AES_GCM_encrypt_update_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_final_aesni
.type	AES_GCM_encrypt_final_aesni,@function
.align	16
AES_GCM_encrypt_final_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_final_aesni
.p2align	4
_AES_GCM_encrypt_final_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        movl	%edx, %eax
        movl	%ecx, %r10d
        movl	%r8d, %r11d
        movq	16(%rsp), %r8
        subq	$16, %rsp
        movdqa	(%rdi), %xmm4
        movdqa	(%r9), %xmm5
        movdqa	(%r8), %xmm6
        movdqa	%xmm5, %xmm8
        movdqa	%xmm5, %xmm7
        psrlq	$63, %xmm8
        psllq	$0x01, %xmm7
        pslldq	$8, %xmm8
        por	%xmm8, %xmm7
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm7, %xmm5
        movl	%r10d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        pinsrq	$0x00, %rdx, %xmm0
        pinsrq	$0x01, %rcx, %xmm0
        pxor	%xmm0, %xmm4
        pshufd	$0x4e, %xmm5, %xmm8
        pshufd	$0x4e, %xmm4, %xmm9
        movdqa	%xmm4, %xmm10
        movdqa	%xmm4, %xmm7
        pclmulqdq	$0x11, %xmm5, %xmm10
        pclmulqdq	$0x00, %xmm5, %xmm7
        pxor	%xmm5, %xmm8
        pxor	%xmm4, %xmm9
        pclmulqdq	$0x00, %xmm9, %xmm8
        pxor	%xmm7, %xmm8
        pxor	%xmm10, %xmm8
        movdqa	%xmm8, %xmm9
        movdqa	%xmm10, %xmm4
        pslldq	$8, %xmm9
        psrldq	$8, %xmm8
        pxor	%xmm9, %xmm7
        pxor	%xmm8, %xmm4
        movdqa	%xmm7, %xmm11
        movdqa	%xmm7, %xmm12
        movdqa	%xmm7, %xmm13
        pslld	$31, %xmm11
        pslld	$30, %xmm12
        pslld	$25, %xmm13
        pxor	%xmm12, %xmm11
        pxor	%xmm13, %xmm11
        movdqa	%xmm11, %xmm12
        psrldq	$4, %xmm12
        pslldq	$12, %xmm11
        pxor	%xmm11, %xmm7
        movdqa	%xmm7, %xmm13
        movdqa	%xmm7, %xmm9
        movdqa	%xmm7, %xmm8
        psrld	$0x01, %xmm13
        psrld	$2, %xmm9
        psrld	$7, %xmm8
        pxor	%xmm9, %xmm13
        pxor	%xmm8, %xmm13
        pxor	%xmm12, %xmm13
        pxor	%xmm7, %xmm13
        pxor	%xmm13, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm4
        movdqu	%xmm6, %xmm0
        pxor	%xmm4, %xmm0
        cmpl	$16, %eax
        je	L_AES_GCM_encrypt_final_aesni_store_tag_16
        xorq	%rcx, %rcx
        movdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_final_aesni_store_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        movb	%r13b, (%rsi,%rcx,1)
        incl	%ecx
        cmpl	%eax, %ecx
        jne	L_AES_GCM_encrypt_final_aesni_store_tag_loop
        jmp	L_AES_GCM_encrypt_final_aesni_store_tag_done
L_AES_GCM_encrypt_final_aesni_store_tag_16:
        movdqu	%xmm0, (%rsi)
L_AES_GCM_encrypt_final_aesni_store_tag_done:
        addq	$16, %rsp
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_final_aesni,.-AES_GCM_encrypt_final_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_update_aesni
.type	AES_GCM_decrypt_update_aesni,@function
.align	16
AES_GCM_decrypt_update_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_update_aesni
.p2align	4
_AES_GCM_decrypt_update_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        pushq	%r15
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	40(%rsp), %rax
        movq	48(%rsp), %r12
        subq	$0xa8, %rsp
        movdqa	(%r9), %xmm6
        movdqa	(%rax), %xmm5
        movdqa	%xmm5, %xmm9
        movdqa	%xmm5, %xmm8
        psrlq	$63, %xmm9
        psllq	$0x01, %xmm8
        pslldq	$8, %xmm9
        por	%xmm9, %xmm8
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm8, %xmm5
        xorl	%r14d, %r14d
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_decrypt_update_aesni_done_128
        andl	$0xffffff80, %r13d
        movdqa	%xmm6, %xmm2
        # H ^ 1
        movdqu	%xmm5, (%rsp)
        # H ^ 2
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm5, %xmm10
        movdqa	%xmm5, %xmm11
        movdqa	%xmm5, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm5, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm0
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm0
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm0
        movdqu	%xmm0, 16(%rsp)
        # H ^ 3
        pshufd	$0x4e, %xmm5, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm5, %xmm11
        pclmulqdq	$0x00, %xmm5, %xmm8
        pxor	%xmm5, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm1
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm1
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm1
        movdqu	%xmm1, 32(%rsp)
        # H ^ 4
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm0, %xmm10
        movdqa	%xmm0, %xmm11
        movdqa	%xmm0, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm0, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm3
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm3
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm3
        movdqu	%xmm3, 48(%rsp)
        # H ^ 5
        pshufd	$0x4e, %xmm0, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm0, %xmm11
        pclmulqdq	$0x00, %xmm0, %xmm8
        pxor	%xmm0, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 64(%rsp)
        # H ^ 6
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm1, %xmm10
        movdqa	%xmm1, %xmm11
        movdqa	%xmm1, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm1, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 80(%rsp)
        # H ^ 7
        pshufd	$0x4e, %xmm1, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm1, %xmm11
        pclmulqdq	$0x00, %xmm1, %xmm8
        pxor	%xmm1, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 96(%rsp)
        # H ^ 8
        pshufd	$0x4e, %xmm3, %xmm9
        pshufd	$0x4e, %xmm3, %xmm10
        movdqa	%xmm3, %xmm11
        movdqa	%xmm3, %xmm8
        pclmulqdq	$0x11, %xmm3, %xmm11
        pclmulqdq	$0x00, %xmm3, %xmm8
        pxor	%xmm3, %xmm9
        pxor	%xmm3, %xmm10
        pclmulqdq	$0x00, %xmm10, %xmm9
        pxor	%xmm8, %xmm9
        pxor	%xmm11, %xmm9
        movdqa	%xmm9, %xmm10
        movdqa	%xmm11, %xmm7
        pslldq	$8, %xmm10
        psrldq	$8, %xmm9
        pxor	%xmm10, %xmm8
        pxor	%xmm9, %xmm7
        movdqa	%xmm8, %xmm12
        movdqa	%xmm8, %xmm13
        movdqa	%xmm8, %xmm14
        pslld	$31, %xmm12
        pslld	$30, %xmm13
        pslld	$25, %xmm14
        pxor	%xmm13, %xmm12
        pxor	%xmm14, %xmm12
        movdqa	%xmm12, %xmm13
        psrldq	$4, %xmm13
        pslldq	$12, %xmm12
        pxor	%xmm12, %xmm8
        movdqa	%xmm8, %xmm14
        movdqa	%xmm8, %xmm10
        movdqa	%xmm8, %xmm9
        psrld	$0x01, %xmm14
        psrld	$2, %xmm10
        psrld	$7, %xmm9
        pxor	%xmm10, %xmm14
        pxor	%xmm9, %xmm14
        pxor	%xmm13, %xmm14
        pxor	%xmm8, %xmm14
        pxor	%xmm14, %xmm7
        movdqu	%xmm7, 112(%rsp)
L_AES_GCM_decrypt_update_aesni_ghash_128:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        movdqu	(%r12), %xmm8
        movdqa	L_aes_gcm_bswap_epi64(%rip), %xmm1
        movdqa	%xmm8, %xmm0
        pshufb	%xmm1, %xmm8
        movdqa	%xmm0, %xmm9
        paddd	L_aes_gcm_one(%rip), %xmm9
        pshufb	%xmm1, %xmm9
        movdqa	%xmm0, %xmm10
        paddd	L_aes_gcm_two(%rip), %xmm10
        pshufb	%xmm1, %xmm10
        movdqa	%xmm0, %xmm11
        paddd	L_aes_gcm_three(%rip), %xmm11
        pshufb	%xmm1, %xmm11
        movdqa	%xmm0, %xmm12
        paddd	L_aes_gcm_four(%rip), %xmm12
        pshufb	%xmm1, %xmm12
        movdqa	%xmm0, %xmm13
        paddd	L_aes_gcm_five(%rip), %xmm13
        pshufb	%xmm1, %xmm13
        movdqa	%xmm0, %xmm14
        paddd	L_aes_gcm_six(%rip), %xmm14
        pshufb	%xmm1, %xmm14
        movdqa	%xmm0, %xmm15
        paddd	L_aes_gcm_seven(%rip), %xmm15
        pshufb	%xmm1, %xmm15
        paddd	L_aes_gcm_eight(%rip), %xmm0
        movdqa	(%rdi), %xmm7
        movdqu	%xmm0, (%r12)
        pxor	%xmm7, %xmm8
        pxor	%xmm7, %xmm9
        pxor	%xmm7, %xmm10
        pxor	%xmm7, %xmm11
        pxor	%xmm7, %xmm12
        pxor	%xmm7, %xmm13
        pxor	%xmm7, %xmm14
        pxor	%xmm7, %xmm15
        movdqu	112(%rsp), %xmm7
        movdqu	(%rcx), %xmm0
        aesenc	16(%rdi), %xmm8
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        pxor	%xmm2, %xmm0
        pshufd	$0x4e, %xmm7, %xmm1
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm7, %xmm1
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm3
        pclmulqdq	$0x11, %xmm7, %xmm3
        aesenc	16(%rdi), %xmm9
        aesenc	16(%rdi), %xmm10
        movdqa	%xmm0, %xmm2
        pclmulqdq	$0x00, %xmm7, %xmm2
        aesenc	16(%rdi), %xmm11
        aesenc	16(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm1
        aesenc	16(%rdi), %xmm13
        aesenc	16(%rdi), %xmm14
        aesenc	16(%rdi), %xmm15
        pxor	%xmm2, %xmm1
        pxor	%xmm3, %xmm1
        movdqu	96(%rsp), %xmm7
        movdqu	16(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	32(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	32(%rdi), %xmm9
        aesenc	32(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	32(%rdi), %xmm11
        aesenc	32(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	32(%rdi), %xmm13
        aesenc	32(%rdi), %xmm14
        aesenc	32(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	80(%rsp), %xmm7
        movdqu	32(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	48(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	48(%rdi), %xmm9
        aesenc	48(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	48(%rdi), %xmm11
        aesenc	48(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	48(%rdi), %xmm13
        aesenc	48(%rdi), %xmm14
        aesenc	48(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	64(%rsp), %xmm7
        movdqu	48(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	64(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	64(%rdi), %xmm9
        aesenc	64(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	64(%rdi), %xmm11
        aesenc	64(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	64(%rdi), %xmm13
        aesenc	64(%rdi), %xmm14
        aesenc	64(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	48(%rsp), %xmm7
        movdqu	64(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	80(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	80(%rdi), %xmm9
        aesenc	80(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	80(%rdi), %xmm11
        aesenc	80(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	80(%rdi), %xmm13
        aesenc	80(%rdi), %xmm14
        aesenc	80(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	32(%rsp), %xmm7
        movdqu	80(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	96(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	96(%rdi), %xmm9
        aesenc	96(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	96(%rdi), %xmm11
        aesenc	96(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	96(%rdi), %xmm13
        aesenc	96(%rdi), %xmm14
        aesenc	96(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	16(%rsp), %xmm7
        movdqu	96(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	112(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	112(%rdi), %xmm9
        aesenc	112(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	112(%rdi), %xmm11
        aesenc	112(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	112(%rdi), %xmm13
        aesenc	112(%rdi), %xmm14
        aesenc	112(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqu	(%rsp), %xmm7
        movdqu	112(%rcx), %xmm0
        pshufd	$0x4e, %xmm7, %xmm4
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm0
        aesenc	128(%rdi), %xmm8
        pxor	%xmm7, %xmm4
        pshufd	$0x4e, %xmm0, %xmm5
        pxor	%xmm0, %xmm5
        movdqa	%xmm0, %xmm6
        pclmulqdq	$0x11, %xmm7, %xmm6
        aesenc	128(%rdi), %xmm9
        aesenc	128(%rdi), %xmm10
        pclmulqdq	$0x00, %xmm0, %xmm7
        aesenc	128(%rdi), %xmm11
        aesenc	128(%rdi), %xmm12
        pclmulqdq	$0x00, %xmm5, %xmm4
        aesenc	128(%rdi), %xmm13
        aesenc	128(%rdi), %xmm14
        aesenc	128(%rdi), %xmm15
        pxor	%xmm7, %xmm1
        pxor	%xmm7, %xmm2
        pxor	%xmm6, %xmm1
        pxor	%xmm6, %xmm3
        pxor	%xmm4, %xmm1
        movdqa	%xmm1, %xmm5
        psrldq	$8, %xmm1
        pslldq	$8, %xmm5
        aesenc	144(%rdi), %xmm8
        pxor	%xmm5, %xmm2
        pxor	%xmm1, %xmm3
        movdqa	%xmm2, %xmm7
        movdqa	%xmm2, %xmm4
        movdqa	%xmm2, %xmm5
        aesenc	144(%rdi), %xmm9
        pslld	$31, %xmm7
        pslld	$30, %xmm4
        pslld	$25, %xmm5
        aesenc	144(%rdi), %xmm10
        pxor	%xmm4, %xmm7
        pxor	%xmm5, %xmm7
        aesenc	144(%rdi), %xmm11
        movdqa	%xmm7, %xmm4
        pslldq	$12, %xmm7
        psrldq	$4, %xmm4
        aesenc	144(%rdi), %xmm12
        pxor	%xmm7, %xmm2
        movdqa	%xmm2, %xmm5
        movdqa	%xmm2, %xmm1
        movdqa	%xmm2, %xmm0
        aesenc	144(%rdi), %xmm13
        psrld	$0x01, %xmm5
        psrld	$2, %xmm1
        psrld	$7, %xmm0
        aesenc	144(%rdi), %xmm14
        pxor	%xmm1, %xmm5
        pxor	%xmm0, %xmm5
        aesenc	144(%rdi), %xmm15
        pxor	%xmm4, %xmm5
        pxor	%xmm5, %xmm2
        pxor	%xmm3, %xmm2
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	176(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	208(%rdi), %xmm7
        aesenc	%xmm7, %xmm8
        aesenc	%xmm7, %xmm9
        aesenc	%xmm7, %xmm10
        aesenc	%xmm7, %xmm11
        aesenc	%xmm7, %xmm12
        aesenc	%xmm7, %xmm13
        aesenc	%xmm7, %xmm14
        aesenc	%xmm7, %xmm15
        movdqa	224(%rdi), %xmm7
L_AES_GCM_decrypt_update_aesni_aesenc_128_ghash_avx_done:
        aesenclast	%xmm7, %xmm8
        aesenclast	%xmm7, %xmm9
        movdqu	(%rcx), %xmm0
        movdqu	16(%rcx), %xmm1
        pxor	%xmm0, %xmm8
        pxor	%xmm1, %xmm9
        movdqu	%xmm8, (%rdx)
        movdqu	%xmm9, 16(%rdx)
        aesenclast	%xmm7, %xmm10
        aesenclast	%xmm7, %xmm11
        movdqu	32(%rcx), %xmm0
        movdqu	48(%rcx), %xmm1
        pxor	%xmm0, %xmm10
        pxor	%xmm1, %xmm11
        movdqu	%xmm10, 32(%rdx)
        movdqu	%xmm11, 48(%rdx)
        aesenclast	%xmm7, %xmm12
        aesenclast	%xmm7, %xmm13
        movdqu	64(%rcx), %xmm0
        movdqu	80(%rcx), %xmm1
        pxor	%xmm0, %xmm12
        pxor	%xmm1, %xmm13
        movdqu	%xmm12, 64(%rdx)
        movdqu	%xmm13, 80(%rdx)
        aesenclast	%xmm7, %xmm14
        aesenclast	%xmm7, %xmm15
        movdqu	96(%rcx), %xmm0
        movdqu	112(%rcx), %xmm1
        pxor	%xmm0, %xmm14
        pxor	%xmm1, %xmm15
        movdqu	%xmm14, 96(%rdx)
        movdqu	%xmm15, 112(%rdx)
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_aesni_ghash_128
        movdqa	%xmm2, %xmm6
        movdqu	(%rsp), %xmm5
L_AES_GCM_decrypt_update_aesni_done_128:
        movl	%r8d, %edx
        cmpl	%edx, %r14d
        jge	L_AES_GCM_decrypt_update_aesni_done_dec
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_decrypt_update_aesni_last_block_done
L_AES_GCM_decrypt_update_aesni_last_block_start:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        movdqu	(%rcx), %xmm1
        movdqa	%xmm5, %xmm0
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm1
        pxor	%xmm6, %xmm1
        movdqu	(%r12), %xmm8
        movdqa	%xmm8, %xmm9
        pshufb	L_aes_gcm_bswap_epi64(%rip), %xmm8
        paddd	L_aes_gcm_one(%rip), %xmm9
        pxor	(%rdi), %xmm8
        movdqu	%xmm9, (%r12)
        movdqa	%xmm1, %xmm10
        pclmulqdq	$16, %xmm0, %xmm10
        aesenc	16(%rdi), %xmm8
        aesenc	32(%rdi), %xmm8
        movdqa	%xmm1, %xmm11
        pclmulqdq	$0x01, %xmm0, %xmm11
        aesenc	48(%rdi), %xmm8
        aesenc	64(%rdi), %xmm8
        movdqa	%xmm1, %xmm12
        pclmulqdq	$0x00, %xmm0, %xmm12
        aesenc	80(%rdi), %xmm8
        movdqa	%xmm1, %xmm1
        pclmulqdq	$0x11, %xmm0, %xmm1
        aesenc	96(%rdi), %xmm8
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm2
        psrldq	$8, %xmm10
        pslldq	$8, %xmm2
        aesenc	112(%rdi), %xmm8
        movdqa	%xmm1, %xmm3
        pxor	%xmm12, %xmm2
        pxor	%xmm10, %xmm3
        movdqa	L_aes_gcm_mod2_128(%rip), %xmm0
        movdqa	%xmm2, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	128(%rdi), %xmm8
        pshufd	$0x4e, %xmm2, %xmm10
        pxor	%xmm11, %xmm10
        movdqa	%xmm10, %xmm11
        pclmulqdq	$16, %xmm0, %xmm11
        aesenc	144(%rdi), %xmm8
        pshufd	$0x4e, %xmm10, %xmm6
        pxor	%xmm11, %xmm6
        pxor	%xmm3, %xmm6
        cmpl	$11, %esi
        movdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	176(%rdi), %xmm8
        cmpl	$13, %esi
        movdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last
        aesenc	%xmm9, %xmm8
        aesenc	208(%rdi), %xmm8
        movdqa	224(%rdi), %xmm9
L_AES_GCM_decrypt_update_aesni_aesenc_gfmul_last:
        aesenclast	%xmm9, %xmm8
        movdqu	(%rcx), %xmm9
        pxor	%xmm9, %xmm8
        movdqu	%xmm8, (%rdx)
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_aesni_last_block_start
L_AES_GCM_decrypt_update_aesni_last_block_done:
L_AES_GCM_decrypt_update_aesni_done_dec:
        movdqa	%xmm6, (%r9)
        addq	$0xa8, %rsp
        popq	%r15
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_update_aesni,.-AES_GCM_decrypt_update_aesni
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_final_aesni
.type	AES_GCM_decrypt_final_aesni,@function
.align	16
AES_GCM_decrypt_final_aesni:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_final_aesni
.p2align	4
_AES_GCM_decrypt_final_aesni:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%rbp
        pushq	%r12
        movl	%edx, %eax
        movl	%ecx, %r10d
        movl	%r8d, %r11d
        movq	32(%rsp), %r8
        movq	40(%rsp), %rbp
        subq	$16, %rsp
        movdqa	(%rdi), %xmm6
        movdqa	(%r9), %xmm5
        movdqa	(%r8), %xmm15
        movdqa	%xmm5, %xmm8
        movdqa	%xmm5, %xmm7
        psrlq	$63, %xmm8
        psllq	$0x01, %xmm7
        pslldq	$8, %xmm8
        por	%xmm8, %xmm7
        pshufd	$0xff, %xmm5, %xmm5
        psrad	$31, %xmm5
        pand	L_aes_gcm_mod2_128(%rip), %xmm5
        pxor	%xmm7, %xmm5
        movl	%r10d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        pinsrq	$0x00, %rdx, %xmm0
        pinsrq	$0x01, %rcx, %xmm0
        pxor	%xmm0, %xmm6
        pshufd	$0x4e, %xmm5, %xmm8
        pshufd	$0x4e, %xmm6, %xmm9
        movdqa	%xmm6, %xmm10
        movdqa	%xmm6, %xmm7
        pclmulqdq	$0x11, %xmm5, %xmm10
        pclmulqdq	$0x00, %xmm5, %xmm7
        pxor	%xmm5, %xmm8
        pxor	%xmm6, %xmm9
        pclmulqdq	$0x00, %xmm9, %xmm8
        pxor	%xmm7, %xmm8
        pxor	%xmm10, %xmm8
        movdqa	%xmm8, %xmm9
        movdqa	%xmm10, %xmm6
        pslldq	$8, %xmm9
        psrldq	$8, %xmm8
        pxor	%xmm9, %xmm7
        pxor	%xmm8, %xmm6
        movdqa	%xmm7, %xmm11
        movdqa	%xmm7, %xmm12
        movdqa	%xmm7, %xmm13
        pslld	$31, %xmm11
        pslld	$30, %xmm12
        pslld	$25, %xmm13
        pxor	%xmm12, %xmm11
        pxor	%xmm13, %xmm11
        movdqa	%xmm11, %xmm12
        psrldq	$4, %xmm12
        pslldq	$12, %xmm11
        pxor	%xmm11, %xmm7
        movdqa	%xmm7, %xmm13
        movdqa	%xmm7, %xmm9
        movdqa	%xmm7, %xmm8
        psrld	$0x01, %xmm13
        psrld	$2, %xmm9
        psrld	$7, %xmm8
        pxor	%xmm9, %xmm13
        pxor	%xmm8, %xmm13
        pxor	%xmm12, %xmm13
        pxor	%xmm7, %xmm13
        pxor	%xmm13, %xmm6
        pshufb	L_aes_gcm_bswap_mask(%rip), %xmm6
        movdqu	%xmm15, %xmm0
        pxor	%xmm6, %xmm0
        cmpl	$16, %eax
        je	L_AES_GCM_decrypt_final_aesni_cmp_tag_16
        subq	$16, %rsp
        xorq	%rcx, %rcx
        xorq	%r12, %r12
        movdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_final_aesni_cmp_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        xorb	(%rsi,%rcx,1), %r13b
        orb	%r13b, %r12b
        incl	%ecx
        cmpl	%eax, %ecx
        jne	L_AES_GCM_decrypt_final_aesni_cmp_tag_loop
        cmpb	$0x00, %r12b
        sete	%r12b
        addq	$16, %rsp
        xorq	%rcx, %rcx
        jmp	L_AES_GCM_decrypt_final_aesni_cmp_tag_done
L_AES_GCM_decrypt_final_aesni_cmp_tag_16:
        movdqu	(%rsi), %xmm1
        pcmpeqb	%xmm1, %xmm0
        pmovmskb	%xmm0, %rdx
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%r12d, %r12d
        cmpl	$0xffff, %edx
        sete	%r12b
L_AES_GCM_decrypt_final_aesni_cmp_tag_done:
        movl	%r12d, (%rbp)
        addq	$16, %rsp
        popq	%r12
        popq	%rbp
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_final_aesni,.-AES_GCM_decrypt_final_aesni
#endif /* __APPLE__ */
#endif /* WOLFSSL_AESGCM_STREAM */
#ifdef HAVE_INTEL_AVX1
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx1_rev8:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx1_mod2_128:
.quad	0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl	GCM_generate_m0_avx1
.type	GCM_generate_m0_avx1,@function
.align	16
GCM_generate_m0_avx1:
#else
.section	__TEXT,__text
.globl	_GCM_generate_m0_avx1
.p2align	4
_GCM_generate_m0_avx1:
#endif /* __APPLE__ */
        vmovdqu	L_GCM_generate_m0_avx1_rev8(%rip), %xmm9
        vmovdqu	L_GCM_generate_m0_avx1_mod2_128(%rip), %xmm10
        vpxor	%xmm8, %xmm8, %xmm8
        vmovdqu	(%rdi), %xmm0
        vmovdqu	%xmm8, (%rsi)
        vmovdqu	%xmm0, %xmm8
        vpshufb	%xmm9, %xmm0, %xmm0
        vpsllq	$63, %xmm0, %xmm5
        vpsrlq	$0x01, %xmm0, %xmm4
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm1, %xmm1
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm1, %xmm1
        vpand	%xmm10, %xmm1, %xmm1
        vpxor	%xmm4, %xmm1, %xmm1
        vpsllq	$63, %xmm1, %xmm5
        vpsrlq	$0x01, %xmm1, %xmm4
        vpslldq	$8, %xmm5, %xmm2
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm2, %xmm2
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm2, %xmm2
        vpand	%xmm10, %xmm2, %xmm2
        vpxor	%xmm4, %xmm2, %xmm2
        vpsllq	$63, %xmm2, %xmm5
        vpsrlq	$0x01, %xmm2, %xmm4
        vpslldq	$8, %xmm5, %xmm3
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm3, %xmm3
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm3, %xmm3
        vpand	%xmm10, %xmm3, %xmm3
        vpxor	%xmm4, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm0, %xmm0
        vpxor	%xmm2, %xmm3, %xmm8
        vmovdqu	%xmm3, 16(%rsi)
        vmovdqu	%xmm2, 32(%rsi)
        vmovdqu	%xmm8, 48(%rsi)
        vmovdqu	%xmm1, 64(%rsi)
        vpxor	%xmm1, %xmm3, %xmm4
        vpxor	%xmm1, %xmm2, %xmm5
        vpxor	%xmm1, %xmm8, %xmm6
        vmovdqu	%xmm4, 80(%rsi)
        vmovdqu	%xmm5, 96(%rsi)
        vmovdqu	%xmm6, 112(%rsi)
        vmovdqu	%xmm0, 128(%rsi)
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm0, %xmm3, %xmm4
        vpxor	%xmm0, %xmm2, %xmm6
        vmovdqu	%xmm4, 144(%rsi)
        vmovdqu	%xmm6, 160(%rsi)
        vpxor	%xmm6, %xmm3, %xmm6
        vmovdqu	%xmm6, 176(%rsi)
        vmovdqu	%xmm1, 192(%rsi)
        vpxor	%xmm1, %xmm3, %xmm4
        vpxor	%xmm1, %xmm2, %xmm5
        vpxor	%xmm1, %xmm8, %xmm6
        vmovdqu	%xmm4, 208(%rsi)
        vmovdqu	%xmm5, 224(%rsi)
        vmovdqu	%xmm6, 240(%rsi)
        vmovdqu	(%rsi), %xmm0
        vmovdqu	16(%rsi), %xmm1
        vmovdqu	32(%rsi), %xmm2
        vmovdqu	48(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 256(%rsi)
        vmovdqu	%xmm1, 272(%rsi)
        vmovdqu	%xmm2, 288(%rsi)
        vmovdqu	%xmm3, 304(%rsi)
        vmovdqu	64(%rsi), %xmm0
        vmovdqu	80(%rsi), %xmm1
        vmovdqu	96(%rsi), %xmm2
        vmovdqu	112(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 320(%rsi)
        vmovdqu	%xmm1, 336(%rsi)
        vmovdqu	%xmm2, 352(%rsi)
        vmovdqu	%xmm3, 368(%rsi)
        vmovdqu	128(%rsi), %xmm0
        vmovdqu	144(%rsi), %xmm1
        vmovdqu	160(%rsi), %xmm2
        vmovdqu	176(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 384(%rsi)
        vmovdqu	%xmm1, 400(%rsi)
        vmovdqu	%xmm2, 416(%rsi)
        vmovdqu	%xmm3, 432(%rsi)
        vmovdqu	192(%rsi), %xmm0
        vmovdqu	208(%rsi), %xmm1
        vmovdqu	224(%rsi), %xmm2
        vmovdqu	240(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 448(%rsi)
        vmovdqu	%xmm1, 464(%rsi)
        vmovdqu	%xmm2, 480(%rsi)
        vmovdqu	%xmm3, 496(%rsi)
        repz retq
#ifndef __APPLE__
.size	GCM_generate_m0_avx1,.-GCM_generate_m0_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_one:
.quad	0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_two:
.quad	0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_three:
.quad	0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_four:
.quad	0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_five:
.quad	0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_six:
.quad	0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_seven:
.quad	0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_eight:
.quad	0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_bswap_epi64:
.quad	0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_bswap_mask:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx1_aes_gcm_mod2_128:
.quad	0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_avx1
.type	AES_GCM_encrypt_avx1,@function
.align	16
AES_GCM_encrypt_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_avx1
.p2align	4
_AES_GCM_encrypt_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%rbx
        pushq	%r14
        pushq	%r15
        movq	%rdx, %r12
        movq	%rcx, %rax
        movl	48(%rsp), %r11d
        movl	56(%rsp), %ebx
        movl	64(%rsp), %r14d
        movq	72(%rsp), %r15
        movl	80(%rsp), %r10d
        subq	$0xa0, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        vpxor	%xmm6, %xmm6, %xmm6
        movl	%ebx, %edx
        cmpl	$12, %edx
        jne	L_AES_GCM_encrypt_avx1_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        vmovq	(%rax), %xmm4
        vpinsrd	$2, 8(%rax), %xmm4, %xmm4
        vpinsrd	$3, %ecx, %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqa	(%r15), %xmm5
        vpxor	%xmm5, %xmm4, %xmm1
        vmovdqa	16(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	32(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	48(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	64(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	80(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	96(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	112(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	128(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	144(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_calc_iv_12_last
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	176(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_calc_iv_12_last
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	208(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_avx1_calc_iv_12_last:
        vaesenclast	%xmm7, %xmm5, %xmm5
        vaesenclast	%xmm7, %xmm1, %xmm1
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        vmovdqu	%xmm1, 144(%rsp)
        jmp	L_AES_GCM_encrypt_avx1_iv_done
L_AES_GCM_encrypt_avx1_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqa	(%r15), %xmm5
        vaesenc	16(%r15), %xmm5, %xmm5
        vaesenc	32(%r15), %xmm5, %xmm5
        vaesenc	48(%r15), %xmm5, %xmm5
        vaesenc	64(%r15), %xmm5, %xmm5
        vaesenc	80(%r15), %xmm5, %xmm5
        vaesenc	96(%r15), %xmm5, %xmm5
        vaesenc	112(%r15), %xmm5, %xmm5
        vaesenc	128(%r15), %xmm5, %xmm5
        vaesenc	144(%r15), %xmm5, %xmm5
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm9, %xmm5, %xmm5
        vaesenc	176(%r15), %xmm5, %xmm5
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm9, %xmm5, %xmm5
        vaesenc	208(%r15), %xmm5, %xmm5
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_avx1_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm5, %xmm5
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_encrypt_avx1_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_avx1_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_avx1_calc_iv_16_loop:
        vmovdqu	(%rax,%rcx,1), %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx1_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_avx1_calc_iv_done
L_AES_GCM_encrypt_avx1_calc_iv_lt16:
        subq	$16, %rsp
        vpxor	%xmm8, %xmm8, %xmm8
        xorl	%ebx, %ebx
        vmovdqu	%xmm8, (%rsp)
L_AES_GCM_encrypt_avx1_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx1_calc_iv_loop
        vmovdqu	(%rsp), %xmm8
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
L_AES_GCM_encrypt_avx1_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqa	(%r15), %xmm8
        vpxor	%xmm4, %xmm8, %xmm8
        vaesenc	16(%r15), %xmm8, %xmm8
        vaesenc	32(%r15), %xmm8, %xmm8
        vaesenc	48(%r15), %xmm8, %xmm8
        vaesenc	64(%r15), %xmm8, %xmm8
        vaesenc	80(%r15), %xmm8, %xmm8
        vaesenc	96(%r15), %xmm8, %xmm8
        vaesenc	112(%r15), %xmm8, %xmm8
        vaesenc	128(%r15), %xmm8, %xmm8
        vaesenc	144(%r15), %xmm8, %xmm8
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%r15), %xmm8, %xmm8
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%r15), %xmm8, %xmm8
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_avx1_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqu	%xmm8, 144(%rsp)
L_AES_GCM_encrypt_avx1_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_encrypt_avx1_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_avx1_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_avx1_calc_aad_16_loop:
        vmovdqu	(%r12,%rcx,1), %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm6, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm6, %xmm6
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx1_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_avx1_calc_aad_done
L_AES_GCM_encrypt_avx1_calc_aad_lt16:
        subq	$16, %rsp
        vpxor	%xmm8, %xmm8, %xmm8
        xorl	%ebx, %ebx
        vmovdqu	%xmm8, (%rsp)
L_AES_GCM_encrypt_avx1_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx1_calc_aad_loop
        vmovdqu	(%rsp), %xmm8
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm6, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm6, %xmm6
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
L_AES_GCM_encrypt_avx1_calc_aad_done:
        # Calculate counter and H
        vpsrlq	$63, %xmm5, %xmm9
        vpsllq	$0x01, %xmm5, %xmm8
        vpslldq	$8, %xmm9, %xmm9
        vpor	%xmm9, %xmm8, %xmm8
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm8, %xmm5, %xmm5
        vmovdqu	%xmm4, 128(%rsp)
        xorl	%ebx, %ebx
        cmpl	$0x80, %r9d
        movl	%r9d, %r13d
        jl	L_AES_GCM_encrypt_avx1_done_128
        andl	$0xffffff80, %r13d
        vmovdqa	%xmm6, %xmm2
        # H ^ 1
        vmovdqu	%xmm5, (%rsp)
        # H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm0
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm0, %xmm0
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm0, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm0, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm1
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm1, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        # H ^ 4
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm3
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm3, %xmm3
        vmovdqu	%xmm3, 48(%rsp)
        # H ^ 5
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm0, %xmm9
        vpshufd	$0x4e, %xmm1, %xmm10
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm8
        vpxor	%xmm0, %xmm9, %xmm9
        vpxor	%xmm1, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        # H ^ 6
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm8
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 80(%rsp)
        # H ^ 7
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm1, %xmm9
        vpshufd	$0x4e, %xmm3, %xmm10
        vpclmulqdq	$0x11, %xmm1, %xmm3, %xmm11
        vpclmulqdq	$0x00, %xmm1, %xmm3, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm3, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        # H ^ 8
        vpclmulqdq	$0x00, %xmm3, %xmm3, %xmm8
        vpclmulqdq	$0x11, %xmm3, %xmm3, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 112(%rsp)
        # First 128 bytes of input
        vmovdqu	128(%rsp), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%r15), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqa	16(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	32(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	48(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	64(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	80(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	96(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	112(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	128(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	144(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_avx1_aesenc_128_enc_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%rdi), %xmm0
        vmovdqu	16(%rdi), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%rsi)
        vmovdqu	%xmm9, 16(%rsi)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%rdi), %xmm0
        vmovdqu	48(%rdi), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%rsi)
        vmovdqu	%xmm11, 48(%rsi)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%rdi), %xmm0
        vmovdqu	80(%rdi), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%rsi)
        vmovdqu	%xmm13, 80(%rsi)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rdi), %xmm0
        vmovdqu	112(%rdi), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%rsi)
        vmovdqu	%xmm15, 112(%rsi)
        cmpl	$0x80, %r13d
        movl	$0x80, %ebx
        jle	L_AES_GCM_encrypt_avx1_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_avx1_ghash_128:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        vmovdqu	128(%rsp), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%r15), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rsp), %xmm7
        vmovdqu	-128(%rdx), %xmm0
        vaesenc	16(%r15), %xmm8, %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm3
        vaesenc	16(%r15), %xmm9, %xmm9
        vaesenc	16(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm2
        vaesenc	16(%r15), %xmm11, %xmm11
        vaesenc	16(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm1, %xmm1
        vaesenc	16(%r15), %xmm13, %xmm13
        vaesenc	16(%r15), %xmm14, %xmm14
        vaesenc	16(%r15), %xmm15, %xmm15
        vpxor	%xmm2, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	-112(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	32(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	32(%r15), %xmm9, %xmm9
        vaesenc	32(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	32(%r15), %xmm11, %xmm11
        vaesenc	32(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	32(%r15), %xmm13, %xmm13
        vaesenc	32(%r15), %xmm14, %xmm14
        vaesenc	32(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	80(%rsp), %xmm7
        vmovdqu	-96(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	48(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	48(%r15), %xmm9, %xmm9
        vaesenc	48(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	48(%r15), %xmm11, %xmm11
        vaesenc	48(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	48(%r15), %xmm13, %xmm13
        vaesenc	48(%r15), %xmm14, %xmm14
        vaesenc	48(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	-80(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	64(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	64(%r15), %xmm9, %xmm9
        vaesenc	64(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	64(%r15), %xmm11, %xmm11
        vaesenc	64(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	64(%r15), %xmm13, %xmm13
        vaesenc	64(%r15), %xmm14, %xmm14
        vaesenc	64(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	48(%rsp), %xmm7
        vmovdqu	-64(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	80(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	80(%r15), %xmm9, %xmm9
        vaesenc	80(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	80(%r15), %xmm11, %xmm11
        vaesenc	80(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	80(%r15), %xmm13, %xmm13
        vaesenc	80(%r15), %xmm14, %xmm14
        vaesenc	80(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	-48(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	96(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	96(%r15), %xmm9, %xmm9
        vaesenc	96(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	96(%r15), %xmm11, %xmm11
        vaesenc	96(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	96(%r15), %xmm13, %xmm13
        vaesenc	96(%r15), %xmm14, %xmm14
        vaesenc	96(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	16(%rsp), %xmm7
        vmovdqu	-32(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	112(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	112(%r15), %xmm9, %xmm9
        vaesenc	112(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	112(%r15), %xmm11, %xmm11
        vaesenc	112(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	112(%r15), %xmm13, %xmm13
        vaesenc	112(%r15), %xmm14, %xmm14
        vaesenc	112(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	(%rsp), %xmm7
        vmovdqu	-16(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	128(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	128(%r15), %xmm9, %xmm9
        vaesenc	128(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	128(%r15), %xmm11, %xmm11
        vaesenc	128(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	128(%r15), %xmm13, %xmm13
        vaesenc	128(%r15), %xmm14, %xmm14
        vaesenc	128(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vpslldq	$8, %xmm1, %xmm5
        vpsrldq	$8, %xmm1, %xmm1
        vaesenc	144(%r15), %xmm8, %xmm8
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm1, %xmm3, %xmm3
        vaesenc	144(%r15), %xmm9, %xmm9
        vpslld	$31, %xmm2, %xmm7
        vpslld	$30, %xmm2, %xmm4
        vpslld	$25, %xmm2, %xmm5
        vaesenc	144(%r15), %xmm10, %xmm10
        vpxor	%xmm4, %xmm7, %xmm7
        vpxor	%xmm5, %xmm7, %xmm7
        vaesenc	144(%r15), %xmm11, %xmm11
        vpsrldq	$4, %xmm7, %xmm4
        vpslldq	$12, %xmm7, %xmm7
        vaesenc	144(%r15), %xmm12, %xmm12
        vpxor	%xmm7, %xmm2, %xmm2
        vpsrld	$0x01, %xmm2, %xmm5
        vaesenc	144(%r15), %xmm13, %xmm13
        vpsrld	$2, %xmm2, %xmm1
        vpsrld	$7, %xmm2, %xmm0
        vaesenc	144(%r15), %xmm14, %xmm14
        vpxor	%xmm1, %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vaesenc	144(%r15), %xmm15, %xmm15
        vpxor	%xmm4, %xmm5, %xmm5
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm3, %xmm2, %xmm2
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm7
        jl	L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%r15), %xmm7
L_AES_GCM_encrypt_avx1_aesenc_128_ghash_avx_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%rcx), %xmm0
        vmovdqu	48(%rcx), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rcx), %xmm0
        vmovdqu	112(%rcx), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_avx1_ghash_128
L_AES_GCM_encrypt_avx1_end_128:
        vmovdqa	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4
        vpshufb	%xmm4, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm9, %xmm9
        vpshufb	%xmm4, %xmm10, %xmm10
        vpshufb	%xmm4, %xmm11, %xmm11
        vpxor	%xmm2, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm12, %xmm12
        vpshufb	%xmm4, %xmm13, %xmm13
        vpshufb	%xmm4, %xmm14, %xmm14
        vpshufb	%xmm4, %xmm15, %xmm15
        vmovdqu	(%rsp), %xmm7
        vmovdqu	16(%rsp), %xmm5
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm15, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm15, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm15, %xmm7, %xmm0
        vpxor	%xmm15, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm4
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm14, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm14, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm14, %xmm5, %xmm0
        vpxor	%xmm14, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	48(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm13, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm13, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm13, %xmm7, %xmm0
        vpxor	%xmm13, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm12, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm12, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm12, %xmm5, %xmm0
        vpxor	%xmm12, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	80(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm11, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm11, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm11, %xmm7, %xmm0
        vpxor	%xmm11, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm10, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm10, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm10, %xmm5, %xmm0
        vpxor	%xmm10, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	112(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm9, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm9, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm9, %xmm7, %xmm0
        vpxor	%xmm9, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm8, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm8, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm8, %xmm5, %xmm0
        vpxor	%xmm8, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm4, %xmm0
        vpslld	$30, %xmm4, %xmm1
        vpslld	$25, %xmm4, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        vpsrld	$0x01, %xmm4, %xmm2
        vpsrld	$2, %xmm4, %xmm3
        vpsrld	$7, %xmm4, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm4, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
        vmovdqu	(%rsp), %xmm5
L_AES_GCM_encrypt_avx1_done_128:
        movl	%r9d, %edx
        cmpl	%edx, %ebx
        jge	L_AES_GCM_encrypt_avx1_done_enc
        movl	%r9d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_avx1_last_block_done
        vmovdqu	128(%rsp), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, 128(%rsp)
        vpxor	(%r15), %xmm8, %xmm8
        vaesenc	16(%r15), %xmm8, %xmm8
        vaesenc	32(%r15), %xmm8, %xmm8
        vaesenc	48(%r15), %xmm8, %xmm8
        vaesenc	64(%r15), %xmm8, %xmm8
        vaesenc	80(%r15), %xmm8, %xmm8
        vaesenc	96(%r15), %xmm8, %xmm8
        vaesenc	112(%r15), %xmm8, %xmm8
        vaesenc	128(%r15), %xmm8, %xmm8
        vaesenc	144(%r15), %xmm8, %xmm8
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_block_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%r15), %xmm8, %xmm8
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_block_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%r15), %xmm8, %xmm8
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_avx1_aesenc_block_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqu	(%rdi,%rbx,1), %xmm9
        vpxor	%xmm9, %xmm8, %xmm8
        vmovdqu	%xmm8, (%rsi,%rbx,1)
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_avx1_last_block_ghash
L_AES_GCM_encrypt_avx1_last_block_start:
        vmovdqu	(%rdi,%rbx,1), %xmm13
        vmovdqu	128(%rsp), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, 128(%rsp)
        vpxor	(%r15), %xmm8, %xmm8
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm10
        vaesenc	16(%r15), %xmm8, %xmm8
        vaesenc	32(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm11
        vaesenc	48(%r15), %xmm8, %xmm8
        vaesenc	64(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm12
        vaesenc	80(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm1
        vaesenc	96(%r15), %xmm8, %xmm8
        vpxor	%xmm11, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm2
        vpsrldq	$8, %xmm10, %xmm10
        vaesenc	112(%r15), %xmm8, %xmm8
        vpxor	%xmm12, %xmm2, %xmm2
        vpxor	%xmm10, %xmm1, %xmm3
        vmovdqa	L_avx1_aes_gcm_mod2_128(%rip), %xmm0
        vpclmulqdq	$16, %xmm0, %xmm2, %xmm11
        vaesenc	128(%r15), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm2, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm0, %xmm10, %xmm11
        vaesenc	144(%r15), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpxor	%xmm3, %xmm10, %xmm6
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%r15), %xmm8, %xmm8
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%r15), %xmm8, %xmm8
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_avx1_aesenc_gfmul_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqa	%xmm13, %xmm0
        vpxor	%xmm0, %xmm8, %xmm8
        vmovdqu	%xmm8, (%rsi,%rbx,1)
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        addl	$16, %ebx
        vpxor	%xmm8, %xmm6, %xmm6
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_avx1_last_block_start
L_AES_GCM_encrypt_avx1_last_block_ghash:
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
L_AES_GCM_encrypt_avx1_last_block_done:
        movl	%r9d, %ecx
        movl	%ecx, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_done
        vmovdqu	128(%rsp), %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpxor	(%r15), %xmm4, %xmm4
        vaesenc	16(%r15), %xmm4, %xmm4
        vaesenc	32(%r15), %xmm4, %xmm4
        vaesenc	48(%r15), %xmm4, %xmm4
        vaesenc	64(%r15), %xmm4, %xmm4
        vaesenc	80(%r15), %xmm4, %xmm4
        vaesenc	96(%r15), %xmm4, %xmm4
        vaesenc	112(%r15), %xmm4, %xmm4
        vaesenc	128(%r15), %xmm4, %xmm4
        vaesenc	144(%r15), %xmm4, %xmm4
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last
        vaesenc	%xmm9, %xmm4, %xmm4
        vaesenc	176(%r15), %xmm4, %xmm4
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last
        vaesenc	%xmm9, %xmm4, %xmm4
        vaesenc	208(%r15), %xmm4, %xmm4
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm4, %xmm4
        subq	$16, %rsp
        xorl	%ecx, %ecx
        vmovdqu	%xmm4, (%rsp)
L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, (%rsi,%rbx,1)
        movb	%r13b, (%rsp,%rcx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_loop
        xorq	%r13, %r13
        cmpl	$16, %ecx
        je	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_finish_enc
L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_byte_loop:
        movb	%r13b, (%rsp,%rcx,1)
        incl	%ecx
        cmpl	$16, %ecx
        jl	L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_byte_loop
L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_finish_enc:
        vmovdqu	(%rsp), %xmm4
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        vpxor	%xmm4, %xmm6, %xmm6
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
L_AES_GCM_encrypt_avx1_aesenc_last15_enc_avx_done:
L_AES_GCM_encrypt_avx1_done_enc:
        movl	%r9d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        vmovq	%rdx, %xmm0
        vmovq	%rcx, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
        vmovdqu	144(%rsp), %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        cmpl	$16, %r14d
        je	L_AES_GCM_encrypt_avx1_store_tag_16
        xorq	%rcx, %rcx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_avx1_store_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        movb	%r13b, (%r8,%rcx,1)
        incl	%ecx
        cmpl	%r14d, %ecx
        jne	L_AES_GCM_encrypt_avx1_store_tag_loop
        jmp	L_AES_GCM_encrypt_avx1_store_tag_done
L_AES_GCM_encrypt_avx1_store_tag_16:
        vmovdqu	%xmm0, (%r8)
L_AES_GCM_encrypt_avx1_store_tag_done:
        vzeroupper
        addq	$0xa0, %rsp
        popq	%r15
        popq	%r14
        popq	%rbx
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_avx1,.-AES_GCM_encrypt_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_avx1
.type	AES_GCM_decrypt_avx1,@function
.align	16
AES_GCM_decrypt_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_avx1
.p2align	4
_AES_GCM_decrypt_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%rbx
        pushq	%r14
        pushq	%r15
        pushq	%rbp
        movq	%rdx, %r12
        movq	%rcx, %rax
        movl	56(%rsp), %r11d
        movl	64(%rsp), %ebx
        movl	72(%rsp), %r14d
        movq	80(%rsp), %r15
        movl	88(%rsp), %r10d
        movq	96(%rsp), %rbp
        subq	$0xa8, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        vpxor	%xmm6, %xmm6, %xmm6
        cmpl	$12, %ebx
        movl	%ebx, %edx
        jne	L_AES_GCM_decrypt_avx1_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        vmovq	(%rax), %xmm4
        vpinsrd	$2, 8(%rax), %xmm4, %xmm4
        vpinsrd	$3, %ecx, %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqa	(%r15), %xmm5
        vpxor	%xmm5, %xmm4, %xmm1
        vmovdqa	16(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	32(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	48(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	64(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	80(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	96(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	112(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	128(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	144(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm7
        jl	L_AES_GCM_decrypt_avx1_calc_iv_12_last
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	176(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm7
        jl	L_AES_GCM_decrypt_avx1_calc_iv_12_last
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	208(%r15), %xmm7
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm1, %xmm1
        vmovdqa	224(%r15), %xmm7
L_AES_GCM_decrypt_avx1_calc_iv_12_last:
        vaesenclast	%xmm7, %xmm5, %xmm5
        vaesenclast	%xmm7, %xmm1, %xmm1
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        vmovdqu	%xmm1, 144(%rsp)
        jmp	L_AES_GCM_decrypt_avx1_iv_done
L_AES_GCM_decrypt_avx1_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqa	(%r15), %xmm5
        vaesenc	16(%r15), %xmm5, %xmm5
        vaesenc	32(%r15), %xmm5, %xmm5
        vaesenc	48(%r15), %xmm5, %xmm5
        vaesenc	64(%r15), %xmm5, %xmm5
        vaesenc	80(%r15), %xmm5, %xmm5
        vaesenc	96(%r15), %xmm5, %xmm5
        vaesenc	112(%r15), %xmm5, %xmm5
        vaesenc	128(%r15), %xmm5, %xmm5
        vaesenc	144(%r15), %xmm5, %xmm5
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm9, %xmm5, %xmm5
        vaesenc	176(%r15), %xmm5, %xmm5
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm9, %xmm5, %xmm5
        vaesenc	208(%r15), %xmm5, %xmm5
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_avx1_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm5, %xmm5
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_decrypt_avx1_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_avx1_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_avx1_calc_iv_16_loop:
        vmovdqu	(%rax,%rcx,1), %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx1_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_avx1_calc_iv_done
L_AES_GCM_decrypt_avx1_calc_iv_lt16:
        subq	$16, %rsp
        vpxor	%xmm8, %xmm8, %xmm8
        xorl	%ebx, %ebx
        vmovdqu	%xmm8, (%rsp)
L_AES_GCM_decrypt_avx1_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx1_calc_iv_loop
        vmovdqu	(%rsp), %xmm8
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
L_AES_GCM_decrypt_avx1_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqa	(%r15), %xmm8
        vpxor	%xmm4, %xmm8, %xmm8
        vaesenc	16(%r15), %xmm8, %xmm8
        vaesenc	32(%r15), %xmm8, %xmm8
        vaesenc	48(%r15), %xmm8, %xmm8
        vaesenc	64(%r15), %xmm8, %xmm8
        vaesenc	80(%r15), %xmm8, %xmm8
        vaesenc	96(%r15), %xmm8, %xmm8
        vaesenc	112(%r15), %xmm8, %xmm8
        vaesenc	128(%r15), %xmm8, %xmm8
        vaesenc	144(%r15), %xmm8, %xmm8
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%r15), %xmm8, %xmm8
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%r15), %xmm8, %xmm8
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_avx1_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqu	%xmm8, 144(%rsp)
L_AES_GCM_decrypt_avx1_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_decrypt_avx1_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_avx1_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_avx1_calc_aad_16_loop:
        vmovdqu	(%r12,%rcx,1), %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm6, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm6, %xmm6
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx1_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_avx1_calc_aad_done
L_AES_GCM_decrypt_avx1_calc_aad_lt16:
        subq	$16, %rsp
        vpxor	%xmm8, %xmm8, %xmm8
        xorl	%ebx, %ebx
        vmovdqu	%xmm8, (%rsp)
L_AES_GCM_decrypt_avx1_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx1_calc_aad_loop
        vmovdqu	(%rsp), %xmm8
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm6, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm7
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm7, %xmm7
        vpxor	%xmm1, %xmm6, %xmm6
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm7, %xmm0
        vpslld	$30, %xmm7, %xmm1
        vpslld	$25, %xmm7, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm2
        vpsrld	$2, %xmm7, %xmm3
        vpsrld	$7, %xmm7, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
L_AES_GCM_decrypt_avx1_calc_aad_done:
        # Calculate counter and H
        vpsrlq	$63, %xmm5, %xmm9
        vpsllq	$0x01, %xmm5, %xmm8
        vpslldq	$8, %xmm9, %xmm9
        vpor	%xmm9, %xmm8, %xmm8
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm8, %xmm5, %xmm5
        vmovdqu	%xmm4, 128(%rsp)
        xorl	%ebx, %ebx
        cmpl	$0x80, %r9d
        movl	%r9d, %r13d
        jl	L_AES_GCM_decrypt_avx1_done_128
        andl	$0xffffff80, %r13d
        vmovdqa	%xmm6, %xmm2
        # H ^ 1
        vmovdqu	%xmm5, (%rsp)
        # H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm0
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm0, %xmm0
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm0, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm0, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm1
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm1, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        # H ^ 4
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm3
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm3, %xmm3
        vmovdqu	%xmm3, 48(%rsp)
        # H ^ 5
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm0, %xmm9
        vpshufd	$0x4e, %xmm1, %xmm10
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm8
        vpxor	%xmm0, %xmm9, %xmm9
        vpxor	%xmm1, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        # H ^ 6
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm8
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 80(%rsp)
        # H ^ 7
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm1, %xmm9
        vpshufd	$0x4e, %xmm3, %xmm10
        vpclmulqdq	$0x11, %xmm1, %xmm3, %xmm11
        vpclmulqdq	$0x00, %xmm1, %xmm3, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm3, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        # H ^ 8
        vpclmulqdq	$0x00, %xmm3, %xmm3, %xmm8
        vpclmulqdq	$0x11, %xmm3, %xmm3, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 112(%rsp)
L_AES_GCM_decrypt_avx1_ghash_128:
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%rsi,%rbx,1), %rdx
        vmovdqu	128(%rsp), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%r15), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rsp), %xmm7
        vmovdqu	(%rcx), %xmm0
        vaesenc	16(%r15), %xmm8, %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm3
        vaesenc	16(%r15), %xmm9, %xmm9
        vaesenc	16(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm2
        vaesenc	16(%r15), %xmm11, %xmm11
        vaesenc	16(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm1, %xmm1
        vaesenc	16(%r15), %xmm13, %xmm13
        vaesenc	16(%r15), %xmm14, %xmm14
        vaesenc	16(%r15), %xmm15, %xmm15
        vpxor	%xmm2, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	16(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	32(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	32(%r15), %xmm9, %xmm9
        vaesenc	32(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	32(%r15), %xmm11, %xmm11
        vaesenc	32(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	32(%r15), %xmm13, %xmm13
        vaesenc	32(%r15), %xmm14, %xmm14
        vaesenc	32(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	80(%rsp), %xmm7
        vmovdqu	32(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	48(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	48(%r15), %xmm9, %xmm9
        vaesenc	48(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	48(%r15), %xmm11, %xmm11
        vaesenc	48(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	48(%r15), %xmm13, %xmm13
        vaesenc	48(%r15), %xmm14, %xmm14
        vaesenc	48(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	48(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	64(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	64(%r15), %xmm9, %xmm9
        vaesenc	64(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	64(%r15), %xmm11, %xmm11
        vaesenc	64(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	64(%r15), %xmm13, %xmm13
        vaesenc	64(%r15), %xmm14, %xmm14
        vaesenc	64(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	48(%rsp), %xmm7
        vmovdqu	64(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	80(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	80(%r15), %xmm9, %xmm9
        vaesenc	80(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	80(%r15), %xmm11, %xmm11
        vaesenc	80(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	80(%r15), %xmm13, %xmm13
        vaesenc	80(%r15), %xmm14, %xmm14
        vaesenc	80(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	80(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	96(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	96(%r15), %xmm9, %xmm9
        vaesenc	96(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	96(%r15), %xmm11, %xmm11
        vaesenc	96(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	96(%r15), %xmm13, %xmm13
        vaesenc	96(%r15), %xmm14, %xmm14
        vaesenc	96(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	16(%rsp), %xmm7
        vmovdqu	96(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	112(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	112(%r15), %xmm9, %xmm9
        vaesenc	112(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	112(%r15), %xmm11, %xmm11
        vaesenc	112(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	112(%r15), %xmm13, %xmm13
        vaesenc	112(%r15), %xmm14, %xmm14
        vaesenc	112(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	(%rsp), %xmm7
        vmovdqu	112(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	128(%r15), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	128(%r15), %xmm9, %xmm9
        vaesenc	128(%r15), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	128(%r15), %xmm11, %xmm11
        vaesenc	128(%r15), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	128(%r15), %xmm13, %xmm13
        vaesenc	128(%r15), %xmm14, %xmm14
        vaesenc	128(%r15), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vpslldq	$8, %xmm1, %xmm5
        vpsrldq	$8, %xmm1, %xmm1
        vaesenc	144(%r15), %xmm8, %xmm8
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm1, %xmm3, %xmm3
        vaesenc	144(%r15), %xmm9, %xmm9
        vpslld	$31, %xmm2, %xmm7
        vpslld	$30, %xmm2, %xmm4
        vpslld	$25, %xmm2, %xmm5
        vaesenc	144(%r15), %xmm10, %xmm10
        vpxor	%xmm4, %xmm7, %xmm7
        vpxor	%xmm5, %xmm7, %xmm7
        vaesenc	144(%r15), %xmm11, %xmm11
        vpsrldq	$4, %xmm7, %xmm4
        vpslldq	$12, %xmm7, %xmm7
        vaesenc	144(%r15), %xmm12, %xmm12
        vpxor	%xmm7, %xmm2, %xmm2
        vpsrld	$0x01, %xmm2, %xmm5
        vaesenc	144(%r15), %xmm13, %xmm13
        vpsrld	$2, %xmm2, %xmm1
        vpsrld	$7, %xmm2, %xmm0
        vaesenc	144(%r15), %xmm14, %xmm14
        vpxor	%xmm1, %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vaesenc	144(%r15), %xmm15, %xmm15
        vpxor	%xmm4, %xmm5, %xmm5
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm3, %xmm2, %xmm2
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm7
        jl	L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm7
        jl	L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%r15), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%r15), %xmm7
L_AES_GCM_decrypt_avx1_aesenc_128_ghash_avx_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%rcx), %xmm0
        vmovdqu	48(%rcx), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rcx), %xmm0
        vmovdqu	112(%rcx), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_avx1_ghash_128
        vmovdqa	%xmm2, %xmm6
        vmovdqu	(%rsp), %xmm5
L_AES_GCM_decrypt_avx1_done_128:
        movl	%r9d, %edx
        cmpl	%edx, %ebx
        jge	L_AES_GCM_decrypt_avx1_done_dec
        movl	%r9d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_decrypt_avx1_last_block_done
L_AES_GCM_decrypt_avx1_last_block_start:
        vmovdqu	(%rdi,%rbx,1), %xmm13
        vmovdqa	%xmm5, %xmm0
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm13, %xmm1
        vpxor	%xmm6, %xmm1, %xmm1
        vmovdqu	128(%rsp), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, 128(%rsp)
        vpxor	(%r15), %xmm8, %xmm8
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm10
        vaesenc	16(%r15), %xmm8, %xmm8
        vaesenc	32(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm11
        vaesenc	48(%r15), %xmm8, %xmm8
        vaesenc	64(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm12
        vaesenc	80(%r15), %xmm8, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vaesenc	96(%r15), %xmm8, %xmm8
        vpxor	%xmm11, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm2
        vpsrldq	$8, %xmm10, %xmm10
        vaesenc	112(%r15), %xmm8, %xmm8
        vpxor	%xmm12, %xmm2, %xmm2
        vpxor	%xmm10, %xmm1, %xmm3
        vmovdqa	L_avx1_aes_gcm_mod2_128(%rip), %xmm0
        vpclmulqdq	$16, %xmm0, %xmm2, %xmm11
        vaesenc	128(%r15), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm2, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm0, %xmm10, %xmm11
        vaesenc	144(%r15), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpxor	%xmm3, %xmm10, %xmm6
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%r15), %xmm8, %xmm8
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%r15), %xmm8, %xmm8
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_avx1_aesenc_gfmul_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqa	%xmm13, %xmm0
        vpxor	%xmm0, %xmm8, %xmm8
        vmovdqu	%xmm8, (%rsi,%rbx,1)
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_avx1_last_block_start
L_AES_GCM_decrypt_avx1_last_block_done:
        movl	%r9d, %ecx
        movl	%ecx, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_done
        vmovdqu	128(%rsp), %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpxor	(%r15), %xmm4, %xmm4
        vaesenc	16(%r15), %xmm4, %xmm4
        vaesenc	32(%r15), %xmm4, %xmm4
        vaesenc	48(%r15), %xmm4, %xmm4
        vaesenc	64(%r15), %xmm4, %xmm4
        vaesenc	80(%r15), %xmm4, %xmm4
        vaesenc	96(%r15), %xmm4, %xmm4
        vaesenc	112(%r15), %xmm4, %xmm4
        vaesenc	128(%r15), %xmm4, %xmm4
        vaesenc	144(%r15), %xmm4, %xmm4
        cmpl	$11, %r10d
        vmovdqa	160(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last
        vaesenc	%xmm9, %xmm4, %xmm4
        vaesenc	176(%r15), %xmm4, %xmm4
        cmpl	$13, %r10d
        vmovdqa	192(%r15), %xmm9
        jl	L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last
        vaesenc	%xmm9, %xmm4, %xmm4
        vaesenc	208(%r15), %xmm4, %xmm4
        vmovdqa	224(%r15), %xmm9
L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_aesenc_avx_last:
        vaesenclast	%xmm9, %xmm4, %xmm4
        subq	$32, %rsp
        xorl	%ecx, %ecx
        vmovdqu	%xmm4, (%rsp)
        vpxor	%xmm0, %xmm0, %xmm0
        vmovdqu	%xmm0, 16(%rsp)
L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        movb	%r13b, 16(%rsp,%rcx,1)
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, (%rsi,%rbx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_loop
        vmovdqu	16(%rsp), %xmm4
        addq	$32, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        vpxor	%xmm4, %xmm6, %xmm6
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
L_AES_GCM_decrypt_avx1_aesenc_last15_dec_avx_done:
L_AES_GCM_decrypt_avx1_done_dec:
        movl	%r9d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        vmovq	%rdx, %xmm0
        vmovq	%rcx, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
        vmovdqu	144(%rsp), %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        cmpl	$16, %r14d
        je	L_AES_GCM_decrypt_avx1_cmp_tag_16
        subq	$16, %rsp
        xorq	%rcx, %rcx
        xorq	%rbx, %rbx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_avx1_cmp_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        xorb	(%r8,%rcx,1), %r13b
        orb	%r13b, %bl
        incl	%ecx
        cmpl	%r14d, %ecx
        jne	L_AES_GCM_decrypt_avx1_cmp_tag_loop
        cmpb	$0x00, %bl
        sete	%bl
        addq	$16, %rsp
        xorq	%rcx, %rcx
        jmp	L_AES_GCM_decrypt_avx1_cmp_tag_done
L_AES_GCM_decrypt_avx1_cmp_tag_16:
        vmovdqu	(%r8), %xmm1
        vpcmpeqb	%xmm1, %xmm0, %xmm0
        vpmovmskb	%xmm0, %rdx
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%ebx, %ebx
        cmpl	$0xffff, %edx
        sete	%bl
L_AES_GCM_decrypt_avx1_cmp_tag_done:
        movl	%ebx, (%rbp)
        vzeroupper
        addq	$0xa8, %rsp
        popq	%rbp
        popq	%r15
        popq	%r14
        popq	%rbx
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_avx1,.-AES_GCM_decrypt_avx1
#endif /* __APPLE__ */
#ifdef WOLFSSL_AESGCM_STREAM
#ifndef __APPLE__
.text
.globl	AES_GCM_init_avx1
.type	AES_GCM_init_avx1,@function
.align	16
AES_GCM_init_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_init_avx1
.p2align	4
_AES_GCM_init_avx1:
#endif /* __APPLE__ */
        pushq	%r12
        pushq	%r13
        movq	%rdx, %r10
        movl	%ecx, %r11d
        movq	24(%rsp), %rax
        subq	$16, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        movl	%r11d, %edx
        cmpl	$12, %edx
        jne	L_AES_GCM_init_avx1_iv_not_12
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        movl	$0x1000000, %ecx
        vmovq	(%r10), %xmm4
        vpinsrd	$2, 8(%r10), %xmm4, %xmm4
        vpinsrd	$3, %ecx, %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqa	(%rdi), %xmm5
        vpxor	%xmm5, %xmm4, %xmm1
        vmovdqa	16(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	32(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	48(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	64(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	80(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	96(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	112(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	128(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	144(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm6
        jl	L_AES_GCM_init_avx1_calc_iv_12_last
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	176(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm6
        jl	L_AES_GCM_init_avx1_calc_iv_12_last
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	208(%rdi), %xmm6
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm1, %xmm1
        vmovdqa	224(%rdi), %xmm6
L_AES_GCM_init_avx1_calc_iv_12_last:
        vaesenclast	%xmm6, %xmm5, %xmm5
        vaesenclast	%xmm6, %xmm1, %xmm1
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        vmovdqu	%xmm1, %xmm15
        jmp	L_AES_GCM_init_avx1_iv_done
L_AES_GCM_init_avx1_iv_not_12:
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqa	(%rdi), %xmm5
        vaesenc	16(%rdi), %xmm5, %xmm5
        vaesenc	32(%rdi), %xmm5, %xmm5
        vaesenc	48(%rdi), %xmm5, %xmm5
        vaesenc	64(%rdi), %xmm5, %xmm5
        vaesenc	80(%rdi), %xmm5, %xmm5
        vaesenc	96(%rdi), %xmm5, %xmm5
        vaesenc	112(%rdi), %xmm5, %xmm5
        vaesenc	128(%rdi), %xmm5, %xmm5
        vaesenc	144(%rdi), %xmm5, %xmm5
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm8
        jl	L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm8, %xmm5, %xmm5
        vaesenc	176(%rdi), %xmm5, %xmm5
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm8
        jl	L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm8, %xmm5, %xmm5
        vaesenc	208(%rdi), %xmm5, %xmm5
        vmovdqa	224(%rdi), %xmm8
L_AES_GCM_init_avx1_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm8, %xmm5, %xmm5
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_init_avx1_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_init_avx1_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_init_avx1_calc_iv_16_loop:
        vmovdqu	(%r10,%rcx,1), %xmm7
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
        vpxor	%xmm7, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm6
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm6, %xmm0
        vpslld	$30, %xmm6, %xmm1
        vpslld	$25, %xmm6, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        vpsrld	$0x01, %xmm6, %xmm2
        vpsrld	$2, %xmm6, %xmm3
        vpsrld	$7, %xmm6, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm6, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_avx1_calc_iv_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_init_avx1_calc_iv_done
L_AES_GCM_init_avx1_calc_iv_lt16:
        subq	$16, %rsp
        vpxor	%xmm7, %xmm7, %xmm7
        xorl	%r13d, %r13d
        vmovdqu	%xmm7, (%rsp)
L_AES_GCM_init_avx1_calc_iv_loop:
        movzbl	(%r10,%rcx,1), %r12d
        movb	%r12b, (%rsp,%r13,1)
        incl	%ecx
        incl	%r13d
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_avx1_calc_iv_loop
        vmovdqu	(%rsp), %xmm7
        addq	$16, %rsp
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
        vpxor	%xmm7, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm6
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm6, %xmm0
        vpslld	$30, %xmm6, %xmm1
        vpslld	$25, %xmm6, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        vpsrld	$0x01, %xmm6, %xmm2
        vpsrld	$2, %xmm6, %xmm3
        vpsrld	$7, %xmm6, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm6, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
L_AES_GCM_init_avx1_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm6
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm6, %xmm0
        vpslld	$30, %xmm6, %xmm1
        vpslld	$25, %xmm6, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        vpsrld	$0x01, %xmm6, %xmm2
        vpsrld	$2, %xmm6, %xmm3
        vpsrld	$7, %xmm6, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm6, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqa	(%rdi), %xmm7
        vpxor	%xmm4, %xmm7, %xmm7
        vaesenc	16(%rdi), %xmm7, %xmm7
        vaesenc	32(%rdi), %xmm7, %xmm7
        vaesenc	48(%rdi), %xmm7, %xmm7
        vaesenc	64(%rdi), %xmm7, %xmm7
        vaesenc	80(%rdi), %xmm7, %xmm7
        vaesenc	96(%rdi), %xmm7, %xmm7
        vaesenc	112(%rdi), %xmm7, %xmm7
        vaesenc	128(%rdi), %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm7, %xmm7
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm8
        jl	L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm8, %xmm7, %xmm7
        vaesenc	176(%rdi), %xmm7, %xmm7
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm8
        jl	L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm8, %xmm7, %xmm7
        vaesenc	208(%rdi), %xmm7, %xmm7
        vmovdqa	224(%rdi), %xmm8
L_AES_GCM_init_avx1_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm8, %xmm7, %xmm7
        vmovdqu	%xmm7, %xmm15
L_AES_GCM_init_avx1_iv_done:
        vmovdqa	%xmm15, (%rax)
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm4, %xmm4
        vmovdqa	%xmm5, (%r8)
        vmovdqa	%xmm4, (%r9)
        addq	$16, %rsp
        popq	%r13
        popq	%r12
        repz retq
#ifndef __APPLE__
.size	AES_GCM_init_avx1,.-AES_GCM_init_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_aad_update_avx1
.type	AES_GCM_aad_update_avx1,@function
.align	16
AES_GCM_aad_update_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_aad_update_avx1
.p2align	4
_AES_GCM_aad_update_avx1:
#endif /* __APPLE__ */
        movq	%rcx, %rax
        vmovdqa	(%rdx), %xmm5
        vmovdqa	(%rax), %xmm6
        xorl	%ecx, %ecx
L_AES_GCM_aad_update_avx1_16_loop:
        vmovdqu	(%rdi,%rcx,1), %xmm7
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
        vpxor	%xmm7, %xmm5, %xmm5
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm5, %xmm1
        vpshufd	$0x4e, %xmm6, %xmm2
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm0
        vpxor	%xmm5, %xmm1, %xmm1
        vpxor	%xmm6, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm4
        vmovdqa	%xmm3, %xmm5
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm5, %xmm5
        vpsrld	$31, %xmm4, %xmm0
        vpsrld	$31, %xmm5, %xmm1
        vpslld	$0x01, %xmm4, %xmm4
        vpslld	$0x01, %xmm5, %xmm5
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm5, %xmm5
        vpor	%xmm0, %xmm4, %xmm4
        vpor	%xmm1, %xmm5, %xmm5
        vpslld	$31, %xmm4, %xmm0
        vpslld	$30, %xmm4, %xmm1
        vpslld	$25, %xmm4, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        vpsrld	$0x01, %xmm4, %xmm2
        vpsrld	$2, %xmm4, %xmm3
        vpsrld	$7, %xmm4, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm4, %xmm2, %xmm2
        vpxor	%xmm2, %xmm5, %xmm5
        addl	$16, %ecx
        cmpl	%esi, %ecx
        jl	L_AES_GCM_aad_update_avx1_16_loop
        vmovdqa	%xmm5, (%rdx)
        repz retq
#ifndef __APPLE__
.size	AES_GCM_aad_update_avx1,.-AES_GCM_aad_update_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_block_avx1
.type	AES_GCM_encrypt_block_avx1,@function
.align	16
AES_GCM_encrypt_block_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_block_avx1
.p2align	4
_AES_GCM_encrypt_block_avx1:
#endif /* __APPLE__ */
        movq	%rdx, %r10
        movq	%rcx, %r11
        vmovdqu	(%r8), %xmm1
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm1, %xmm1
        vmovdqu	%xmm1, (%r8)
        vpxor	(%rdi), %xmm0, %xmm0
        vaesenc	16(%rdi), %xmm0, %xmm0
        vaesenc	32(%rdi), %xmm0, %xmm0
        vaesenc	48(%rdi), %xmm0, %xmm0
        vaesenc	64(%rdi), %xmm0, %xmm0
        vaesenc	80(%rdi), %xmm0, %xmm0
        vaesenc	96(%rdi), %xmm0, %xmm0
        vaesenc	112(%rdi), %xmm0, %xmm0
        vaesenc	128(%rdi), %xmm0, %xmm0
        vaesenc	144(%rdi), %xmm0, %xmm0
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_avx1_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vaesenc	176(%rdi), %xmm0, %xmm0
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_avx1_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vaesenc	208(%rdi), %xmm0, %xmm0
        vmovdqa	224(%rdi), %xmm1
L_AES_GCM_encrypt_block_avx1_aesenc_block_last:
        vaesenclast	%xmm1, %xmm0, %xmm0
        vmovdqu	(%r11), %xmm1
        vpxor	%xmm1, %xmm0, %xmm0
        vmovdqu	%xmm0, (%r10)
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vzeroupper
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_block_avx1,.-AES_GCM_encrypt_block_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_ghash_block_avx1
.type	AES_GCM_ghash_block_avx1,@function
.align	16
AES_GCM_ghash_block_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_ghash_block_avx1
.p2align	4
_AES_GCM_ghash_block_avx1:
#endif /* __APPLE__ */
        vmovdqa	(%rsi), %xmm4
        vmovdqa	(%rdx), %xmm5
        vmovdqu	(%rdi), %xmm7
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm7, %xmm7
        vpxor	%xmm7, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm4, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpxor	%xmm4, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm6
        vmovdqa	%xmm3, %xmm4
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm4, %xmm4
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        vpslld	$31, %xmm6, %xmm0
        vpslld	$30, %xmm6, %xmm1
        vpslld	$25, %xmm6, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        vpsrld	$0x01, %xmm6, %xmm2
        vpsrld	$2, %xmm6, %xmm3
        vpsrld	$7, %xmm6, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm6, %xmm2, %xmm2
        vpxor	%xmm2, %xmm4, %xmm4
        vmovdqa	%xmm4, (%rsi)
        vzeroupper
        repz retq
#ifndef __APPLE__
.size	AES_GCM_ghash_block_avx1,.-AES_GCM_ghash_block_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_update_avx1
.type	AES_GCM_encrypt_update_avx1,@function
.align	16
AES_GCM_encrypt_update_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_update_avx1
.p2align	4
_AES_GCM_encrypt_update_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	32(%rsp), %rax
        movq	40(%rsp), %r12
        subq	$0xa0, %rsp
        vmovdqa	(%r9), %xmm6
        vmovdqa	(%rax), %xmm5
        vpsrlq	$63, %xmm5, %xmm9
        vpsllq	$0x01, %xmm5, %xmm8
        vpslldq	$8, %xmm9, %xmm9
        vpor	%xmm9, %xmm8, %xmm8
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm8, %xmm5, %xmm5
        xorl	%r14d, %r14d
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_encrypt_update_avx1_done_128
        andl	$0xffffff80, %r13d
        vmovdqa	%xmm6, %xmm2
        # H ^ 1
        vmovdqu	%xmm5, (%rsp)
        # H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm0
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm0, %xmm0
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm0, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm0, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm1
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm1, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        # H ^ 4
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm3
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm3, %xmm3
        vmovdqu	%xmm3, 48(%rsp)
        # H ^ 5
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm0, %xmm9
        vpshufd	$0x4e, %xmm1, %xmm10
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm8
        vpxor	%xmm0, %xmm9, %xmm9
        vpxor	%xmm1, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        # H ^ 6
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm8
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 80(%rsp)
        # H ^ 7
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm1, %xmm9
        vpshufd	$0x4e, %xmm3, %xmm10
        vpclmulqdq	$0x11, %xmm1, %xmm3, %xmm11
        vpclmulqdq	$0x00, %xmm1, %xmm3, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm3, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        # H ^ 8
        vpclmulqdq	$0x00, %xmm3, %xmm3, %xmm8
        vpclmulqdq	$0x11, %xmm3, %xmm3, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 112(%rsp)
        # First 128 bytes of input
        vmovdqu	(%r12), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%rdi), %xmm7
        vmovdqu	%xmm0, (%r12)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqa	16(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	32(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	48(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	64(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	80(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	96(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	112(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	128(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	144(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_avx1_aesenc_128_enc_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%r11), %xmm0
        vmovdqu	16(%r11), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%r10)
        vmovdqu	%xmm9, 16(%r10)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%r11), %xmm0
        vmovdqu	48(%r11), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%r10)
        vmovdqu	%xmm11, 48(%r10)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%r11), %xmm0
        vmovdqu	80(%r11), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%r10)
        vmovdqu	%xmm13, 80(%r10)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%r11), %xmm0
        vmovdqu	112(%r11), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%r10)
        vmovdqu	%xmm15, 112(%r10)
        cmpl	$0x80, %r13d
        movl	$0x80, %r14d
        jle	L_AES_GCM_encrypt_update_avx1_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_update_avx1_ghash_128:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        vmovdqu	(%r12), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%rdi), %xmm7
        vmovdqu	%xmm0, (%r12)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rsp), %xmm7
        vmovdqu	-128(%rdx), %xmm0
        vaesenc	16(%rdi), %xmm8, %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm3
        vaesenc	16(%rdi), %xmm9, %xmm9
        vaesenc	16(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm2
        vaesenc	16(%rdi), %xmm11, %xmm11
        vaesenc	16(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm1, %xmm1
        vaesenc	16(%rdi), %xmm13, %xmm13
        vaesenc	16(%rdi), %xmm14, %xmm14
        vaesenc	16(%rdi), %xmm15, %xmm15
        vpxor	%xmm2, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	-112(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	32(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	32(%rdi), %xmm9, %xmm9
        vaesenc	32(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	32(%rdi), %xmm11, %xmm11
        vaesenc	32(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	32(%rdi), %xmm13, %xmm13
        vaesenc	32(%rdi), %xmm14, %xmm14
        vaesenc	32(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	80(%rsp), %xmm7
        vmovdqu	-96(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	48(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	48(%rdi), %xmm9, %xmm9
        vaesenc	48(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	48(%rdi), %xmm11, %xmm11
        vaesenc	48(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	48(%rdi), %xmm13, %xmm13
        vaesenc	48(%rdi), %xmm14, %xmm14
        vaesenc	48(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	-80(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	64(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	64(%rdi), %xmm9, %xmm9
        vaesenc	64(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	64(%rdi), %xmm11, %xmm11
        vaesenc	64(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	64(%rdi), %xmm13, %xmm13
        vaesenc	64(%rdi), %xmm14, %xmm14
        vaesenc	64(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	48(%rsp), %xmm7
        vmovdqu	-64(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	80(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	80(%rdi), %xmm9, %xmm9
        vaesenc	80(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	80(%rdi), %xmm11, %xmm11
        vaesenc	80(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	80(%rdi), %xmm13, %xmm13
        vaesenc	80(%rdi), %xmm14, %xmm14
        vaesenc	80(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	-48(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	96(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	96(%rdi), %xmm9, %xmm9
        vaesenc	96(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	96(%rdi), %xmm11, %xmm11
        vaesenc	96(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	96(%rdi), %xmm13, %xmm13
        vaesenc	96(%rdi), %xmm14, %xmm14
        vaesenc	96(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	16(%rsp), %xmm7
        vmovdqu	-32(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	112(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	112(%rdi), %xmm9, %xmm9
        vaesenc	112(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	112(%rdi), %xmm11, %xmm11
        vaesenc	112(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	112(%rdi), %xmm13, %xmm13
        vaesenc	112(%rdi), %xmm14, %xmm14
        vaesenc	112(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	(%rsp), %xmm7
        vmovdqu	-16(%rdx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	128(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	128(%rdi), %xmm9, %xmm9
        vaesenc	128(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	128(%rdi), %xmm11, %xmm11
        vaesenc	128(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	128(%rdi), %xmm13, %xmm13
        vaesenc	128(%rdi), %xmm14, %xmm14
        vaesenc	128(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vpslldq	$8, %xmm1, %xmm5
        vpsrldq	$8, %xmm1, %xmm1
        vaesenc	144(%rdi), %xmm8, %xmm8
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm1, %xmm3, %xmm3
        vaesenc	144(%rdi), %xmm9, %xmm9
        vpslld	$31, %xmm2, %xmm7
        vpslld	$30, %xmm2, %xmm4
        vpslld	$25, %xmm2, %xmm5
        vaesenc	144(%rdi), %xmm10, %xmm10
        vpxor	%xmm4, %xmm7, %xmm7
        vpxor	%xmm5, %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm11, %xmm11
        vpsrldq	$4, %xmm7, %xmm4
        vpslldq	$12, %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm12, %xmm12
        vpxor	%xmm7, %xmm2, %xmm2
        vpsrld	$0x01, %xmm2, %xmm5
        vaesenc	144(%rdi), %xmm13, %xmm13
        vpsrld	$2, %xmm2, %xmm1
        vpsrld	$7, %xmm2, %xmm0
        vaesenc	144(%rdi), %xmm14, %xmm14
        vpxor	%xmm1, %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vaesenc	144(%rdi), %xmm15, %xmm15
        vpxor	%xmm4, %xmm5, %xmm5
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm3, %xmm2, %xmm2
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_avx1_aesenc_128_ghash_avx_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%rcx), %xmm0
        vmovdqu	48(%rcx), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rcx), %xmm0
        vmovdqu	112(%rcx), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_avx1_ghash_128
L_AES_GCM_encrypt_update_avx1_end_128:
        vmovdqa	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4
        vpshufb	%xmm4, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm9, %xmm9
        vpshufb	%xmm4, %xmm10, %xmm10
        vpshufb	%xmm4, %xmm11, %xmm11
        vpxor	%xmm2, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm12, %xmm12
        vpshufb	%xmm4, %xmm13, %xmm13
        vpshufb	%xmm4, %xmm14, %xmm14
        vpshufb	%xmm4, %xmm15, %xmm15
        vmovdqu	(%rsp), %xmm7
        vmovdqu	16(%rsp), %xmm5
        # ghash_gfmul_avx
        vpshufd	$0x4e, %xmm15, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm15, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm15, %xmm7, %xmm0
        vpxor	%xmm15, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqa	%xmm0, %xmm4
        vmovdqa	%xmm3, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm14, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm14, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm14, %xmm5, %xmm0
        vpxor	%xmm14, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	48(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm13, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm13, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm13, %xmm7, %xmm0
        vpxor	%xmm13, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm12, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm12, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm12, %xmm5, %xmm0
        vpxor	%xmm12, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	80(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm11, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm11, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm11, %xmm7, %xmm0
        vpxor	%xmm11, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm10, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm10, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm10, %xmm5, %xmm0
        vpxor	%xmm10, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	112(%rsp), %xmm5
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm9, %xmm1
        vpshufd	$0x4e, %xmm7, %xmm2
        vpclmulqdq	$0x11, %xmm9, %xmm7, %xmm3
        vpclmulqdq	$0x00, %xmm9, %xmm7, %xmm0
        vpxor	%xmm9, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        # ghash_gfmul_xor_avx
        vpshufd	$0x4e, %xmm8, %xmm1
        vpshufd	$0x4e, %xmm5, %xmm2
        vpclmulqdq	$0x11, %xmm8, %xmm5, %xmm3
        vpclmulqdq	$0x00, %xmm8, %xmm5, %xmm0
        vpxor	%xmm8, %xmm1, %xmm1
        vpxor	%xmm5, %xmm2, %xmm2
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vpxor	%xmm0, %xmm4, %xmm4
        vpxor	%xmm3, %xmm6, %xmm6
        vpslldq	$8, %xmm1, %xmm2
        vpsrldq	$8, %xmm1, %xmm1
        vpxor	%xmm2, %xmm4, %xmm4
        vpxor	%xmm1, %xmm6, %xmm6
        vpslld	$31, %xmm4, %xmm0
        vpslld	$30, %xmm4, %xmm1
        vpslld	$25, %xmm4, %xmm2
        vpxor	%xmm1, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vmovdqa	%xmm0, %xmm1
        vpsrldq	$4, %xmm1, %xmm1
        vpslldq	$12, %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        vpsrld	$0x01, %xmm4, %xmm2
        vpsrld	$2, %xmm4, %xmm3
        vpsrld	$7, %xmm4, %xmm0
        vpxor	%xmm3, %xmm2, %xmm2
        vpxor	%xmm0, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm4, %xmm2, %xmm2
        vpxor	%xmm2, %xmm6, %xmm6
        vmovdqu	(%rsp), %xmm5
L_AES_GCM_encrypt_update_avx1_done_128:
        movl	%r8d, %edx
        cmpl	%edx, %r14d
        jge	L_AES_GCM_encrypt_update_avx1_done_enc
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_avx1_last_block_done
        vmovdqu	(%r12), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, (%r12)
        vpxor	(%rdi), %xmm8, %xmm8
        vaesenc	16(%rdi), %xmm8, %xmm8
        vaesenc	32(%rdi), %xmm8, %xmm8
        vaesenc	48(%rdi), %xmm8, %xmm8
        vaesenc	64(%rdi), %xmm8, %xmm8
        vaesenc	80(%rdi), %xmm8, %xmm8
        vaesenc	96(%rdi), %xmm8, %xmm8
        vaesenc	112(%rdi), %xmm8, %xmm8
        vaesenc	128(%rdi), %xmm8, %xmm8
        vaesenc	144(%rdi), %xmm8, %xmm8
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_block_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%rdi), %xmm8, %xmm8
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_block_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%rdi), %xmm8, %xmm8
        vmovdqa	224(%rdi), %xmm9
L_AES_GCM_encrypt_update_avx1_aesenc_block_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqu	(%r11,%r14,1), %xmm9
        vpxor	%xmm9, %xmm8, %xmm8
        vmovdqu	%xmm8, (%r10,%r14,1)
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        vpxor	%xmm8, %xmm6, %xmm6
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_avx1_last_block_ghash
L_AES_GCM_encrypt_update_avx1_last_block_start:
        vmovdqu	(%r11,%r14,1), %xmm13
        vmovdqu	(%r12), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, (%r12)
        vpxor	(%rdi), %xmm8, %xmm8
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm10
        vaesenc	16(%rdi), %xmm8, %xmm8
        vaesenc	32(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm11
        vaesenc	48(%rdi), %xmm8, %xmm8
        vaesenc	64(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm12
        vaesenc	80(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm1
        vaesenc	96(%rdi), %xmm8, %xmm8
        vpxor	%xmm11, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm2
        vpsrldq	$8, %xmm10, %xmm10
        vaesenc	112(%rdi), %xmm8, %xmm8
        vpxor	%xmm12, %xmm2, %xmm2
        vpxor	%xmm10, %xmm1, %xmm3
        vmovdqa	L_avx1_aes_gcm_mod2_128(%rip), %xmm0
        vpclmulqdq	$16, %xmm0, %xmm2, %xmm11
        vaesenc	128(%rdi), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm2, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm0, %xmm10, %xmm11
        vaesenc	144(%rdi), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpxor	%xmm3, %xmm10, %xmm6
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%rdi), %xmm8, %xmm8
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%rdi), %xmm8, %xmm8
        vmovdqa	224(%rdi), %xmm9
L_AES_GCM_encrypt_update_avx1_aesenc_gfmul_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqa	%xmm13, %xmm0
        vpxor	%xmm0, %xmm8, %xmm8
        vmovdqu	%xmm8, (%r10,%r14,1)
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm8, %xmm8
        addl	$16, %r14d
        vpxor	%xmm8, %xmm6, %xmm6
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_avx1_last_block_start
L_AES_GCM_encrypt_update_avx1_last_block_ghash:
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm6, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm6, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm6
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm6, %xmm6
L_AES_GCM_encrypt_update_avx1_last_block_done:
L_AES_GCM_encrypt_update_avx1_done_enc:
        vmovdqa	%xmm6, (%r9)
        vzeroupper
        addq	$0xa0, %rsp
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_update_avx1,.-AES_GCM_encrypt_update_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_final_avx1
.type	AES_GCM_encrypt_final_avx1,@function
.align	16
AES_GCM_encrypt_final_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_final_avx1
.p2align	4
_AES_GCM_encrypt_final_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        movl	%edx, %eax
        movl	%ecx, %r10d
        movl	%r8d, %r11d
        movq	16(%rsp), %r8
        subq	$16, %rsp
        vmovdqa	(%rdi), %xmm4
        vmovdqa	(%r9), %xmm5
        vmovdqa	(%r8), %xmm6
        vpsrlq	$63, %xmm5, %xmm8
        vpsllq	$0x01, %xmm5, %xmm7
        vpslldq	$8, %xmm8, %xmm8
        vpor	%xmm8, %xmm7, %xmm7
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm7, %xmm5, %xmm5
        movl	%r10d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        vmovq	%rdx, %xmm0
        vmovq	%rcx, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm8
        vpshufd	$0x4e, %xmm4, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm4, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm7
        vpxor	%xmm5, %xmm8, %xmm8
        vpxor	%xmm4, %xmm9, %xmm9
        vpclmulqdq	$0x00, %xmm9, %xmm8, %xmm8
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm10, %xmm8, %xmm8
        vpslldq	$8, %xmm8, %xmm9
        vpsrldq	$8, %xmm8, %xmm8
        vpxor	%xmm9, %xmm7, %xmm7
        vpxor	%xmm8, %xmm10, %xmm4
        vpslld	$31, %xmm7, %xmm11
        vpslld	$30, %xmm7, %xmm12
        vpslld	$25, %xmm7, %xmm13
        vpxor	%xmm12, %xmm11, %xmm11
        vpxor	%xmm13, %xmm11, %xmm11
        vpsrldq	$4, %xmm11, %xmm12
        vpslldq	$12, %xmm11, %xmm11
        vpxor	%xmm11, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm13
        vpsrld	$2, %xmm7, %xmm9
        vpsrld	$7, %xmm7, %xmm8
        vpxor	%xmm9, %xmm13, %xmm13
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm13, %xmm13
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm13, %xmm4, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        vpxor	%xmm6, %xmm4, %xmm0
        cmpl	$16, %eax
        je	L_AES_GCM_encrypt_final_avx1_store_tag_16
        xorq	%rcx, %rcx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_final_avx1_store_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        movb	%r13b, (%rsi,%rcx,1)
        incl	%ecx
        cmpl	%eax, %ecx
        jne	L_AES_GCM_encrypt_final_avx1_store_tag_loop
        jmp	L_AES_GCM_encrypt_final_avx1_store_tag_done
L_AES_GCM_encrypt_final_avx1_store_tag_16:
        vmovdqu	%xmm0, (%rsi)
L_AES_GCM_encrypt_final_avx1_store_tag_done:
        vzeroupper
        addq	$16, %rsp
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_final_avx1,.-AES_GCM_encrypt_final_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_update_avx1
.type	AES_GCM_decrypt_update_avx1,@function
.align	16
AES_GCM_decrypt_update_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_update_avx1
.p2align	4
_AES_GCM_decrypt_update_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	32(%rsp), %rax
        movq	40(%rsp), %r12
        subq	$0xa8, %rsp
        vmovdqa	(%r9), %xmm6
        vmovdqa	(%rax), %xmm5
        vpsrlq	$63, %xmm5, %xmm9
        vpsllq	$0x01, %xmm5, %xmm8
        vpslldq	$8, %xmm9, %xmm9
        vpor	%xmm9, %xmm8, %xmm8
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm8, %xmm5, %xmm5
        xorl	%r14d, %r14d
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_decrypt_update_avx1_done_128
        andl	$0xffffff80, %r13d
        vmovdqa	%xmm6, %xmm2
        # H ^ 1
        vmovdqu	%xmm5, (%rsp)
        # H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm8
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm0
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm0, %xmm0
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm9
        vpshufd	$0x4e, %xmm0, %xmm10
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm8
        vpxor	%xmm5, %xmm9, %xmm9
        vpxor	%xmm0, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm1
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm1, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        # H ^ 4
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm3
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm3, %xmm3
        vmovdqu	%xmm3, 48(%rsp)
        # H ^ 5
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm0, %xmm9
        vpshufd	$0x4e, %xmm1, %xmm10
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm8
        vpxor	%xmm0, %xmm9, %xmm9
        vpxor	%xmm1, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        # H ^ 6
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm8
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 80(%rsp)
        # H ^ 7
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm1, %xmm9
        vpshufd	$0x4e, %xmm3, %xmm10
        vpclmulqdq	$0x11, %xmm1, %xmm3, %xmm11
        vpclmulqdq	$0x00, %xmm1, %xmm3, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm3, %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm10, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm11, %xmm9, %xmm9
        vpslldq	$8, %xmm9, %xmm10
        vpsrldq	$8, %xmm9, %xmm9
        vpxor	%xmm10, %xmm8, %xmm8
        vpxor	%xmm9, %xmm11, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        # H ^ 8
        vpclmulqdq	$0x00, %xmm3, %xmm3, %xmm8
        vpclmulqdq	$0x11, %xmm3, %xmm3, %xmm7
        vpslld	$31, %xmm8, %xmm12
        vpslld	$30, %xmm8, %xmm13
        vpslld	$25, %xmm8, %xmm14
        vpxor	%xmm13, %xmm12, %xmm12
        vpxor	%xmm14, %xmm12, %xmm12
        vpsrldq	$4, %xmm12, %xmm13
        vpslldq	$12, %xmm12, %xmm12
        vpxor	%xmm12, %xmm8, %xmm8
        vpsrld	$0x01, %xmm8, %xmm14
        vpsrld	$2, %xmm8, %xmm10
        vpsrld	$7, %xmm8, %xmm9
        vpxor	%xmm10, %xmm14, %xmm14
        vpxor	%xmm9, %xmm14, %xmm14
        vpxor	%xmm13, %xmm14, %xmm14
        vpxor	%xmm8, %xmm14, %xmm14
        vpxor	%xmm14, %xmm7, %xmm7
        vmovdqu	%xmm7, 112(%rsp)
L_AES_GCM_decrypt_update_avx1_ghash_128:
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        vmovdqu	(%r12), %xmm0
        vmovdqa	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm1
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx1_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx1_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx1_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx1_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx1_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx1_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm15, %xmm15
        vpaddd	L_avx1_aes_gcm_eight(%rip), %xmm0, %xmm0
        vmovdqa	(%rdi), %xmm7
        vmovdqu	%xmm0, (%r12)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rsp), %xmm7
        vmovdqu	(%rcx), %xmm0
        vaesenc	16(%rdi), %xmm8, %xmm8
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm3
        vaesenc	16(%rdi), %xmm9, %xmm9
        vaesenc	16(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm2
        vaesenc	16(%rdi), %xmm11, %xmm11
        vaesenc	16(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm1, %xmm1
        vaesenc	16(%rdi), %xmm13, %xmm13
        vaesenc	16(%rdi), %xmm14, %xmm14
        vaesenc	16(%rdi), %xmm15, %xmm15
        vpxor	%xmm2, %xmm1, %xmm1
        vpxor	%xmm3, %xmm1, %xmm1
        vmovdqu	96(%rsp), %xmm7
        vmovdqu	16(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	32(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	32(%rdi), %xmm9, %xmm9
        vaesenc	32(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	32(%rdi), %xmm11, %xmm11
        vaesenc	32(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	32(%rdi), %xmm13, %xmm13
        vaesenc	32(%rdi), %xmm14, %xmm14
        vaesenc	32(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	80(%rsp), %xmm7
        vmovdqu	32(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	48(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	48(%rdi), %xmm9, %xmm9
        vaesenc	48(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	48(%rdi), %xmm11, %xmm11
        vaesenc	48(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	48(%rdi), %xmm13, %xmm13
        vaesenc	48(%rdi), %xmm14, %xmm14
        vaesenc	48(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	64(%rsp), %xmm7
        vmovdqu	48(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	64(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	64(%rdi), %xmm9, %xmm9
        vaesenc	64(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	64(%rdi), %xmm11, %xmm11
        vaesenc	64(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	64(%rdi), %xmm13, %xmm13
        vaesenc	64(%rdi), %xmm14, %xmm14
        vaesenc	64(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	48(%rsp), %xmm7
        vmovdqu	64(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	80(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	80(%rdi), %xmm9, %xmm9
        vaesenc	80(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	80(%rdi), %xmm11, %xmm11
        vaesenc	80(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	80(%rdi), %xmm13, %xmm13
        vaesenc	80(%rdi), %xmm14, %xmm14
        vaesenc	80(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	32(%rsp), %xmm7
        vmovdqu	80(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	96(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	96(%rdi), %xmm9, %xmm9
        vaesenc	96(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	96(%rdi), %xmm11, %xmm11
        vaesenc	96(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	96(%rdi), %xmm13, %xmm13
        vaesenc	96(%rdi), %xmm14, %xmm14
        vaesenc	96(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	16(%rsp), %xmm7
        vmovdqu	96(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	112(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	112(%rdi), %xmm9, %xmm9
        vaesenc	112(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	112(%rdi), %xmm11, %xmm11
        vaesenc	112(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	112(%rdi), %xmm13, %xmm13
        vaesenc	112(%rdi), %xmm14, %xmm14
        vaesenc	112(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vmovdqu	(%rsp), %xmm7
        vmovdqu	112(%rcx), %xmm0
        vpshufd	$0x4e, %xmm7, %xmm4
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vaesenc	128(%rdi), %xmm8, %xmm8
        vpxor	%xmm7, %xmm4, %xmm4
        vpshufd	$0x4e, %xmm0, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vpclmulqdq	$0x11, %xmm7, %xmm0, %xmm6
        vaesenc	128(%rdi), %xmm9, %xmm9
        vaesenc	128(%rdi), %xmm10, %xmm10
        vpclmulqdq	$0x00, %xmm7, %xmm0, %xmm7
        vaesenc	128(%rdi), %xmm11, %xmm11
        vaesenc	128(%rdi), %xmm12, %xmm12
        vpclmulqdq	$0x00, %xmm5, %xmm4, %xmm4
        vaesenc	128(%rdi), %xmm13, %xmm13
        vaesenc	128(%rdi), %xmm14, %xmm14
        vaesenc	128(%rdi), %xmm15, %xmm15
        vpxor	%xmm7, %xmm1, %xmm1
        vpxor	%xmm7, %xmm2, %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpxor	%xmm6, %xmm3, %xmm3
        vpxor	%xmm4, %xmm1, %xmm1
        vpslldq	$8, %xmm1, %xmm5
        vpsrldq	$8, %xmm1, %xmm1
        vaesenc	144(%rdi), %xmm8, %xmm8
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm1, %xmm3, %xmm3
        vaesenc	144(%rdi), %xmm9, %xmm9
        vpslld	$31, %xmm2, %xmm7
        vpslld	$30, %xmm2, %xmm4
        vpslld	$25, %xmm2, %xmm5
        vaesenc	144(%rdi), %xmm10, %xmm10
        vpxor	%xmm4, %xmm7, %xmm7
        vpxor	%xmm5, %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm11, %xmm11
        vpsrldq	$4, %xmm7, %xmm4
        vpslldq	$12, %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm12, %xmm12
        vpxor	%xmm7, %xmm2, %xmm2
        vpsrld	$0x01, %xmm2, %xmm5
        vaesenc	144(%rdi), %xmm13, %xmm13
        vpsrld	$2, %xmm2, %xmm1
        vpsrld	$7, %xmm2, %xmm0
        vaesenc	144(%rdi), %xmm14, %xmm14
        vpxor	%xmm1, %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        vaesenc	144(%rdi), %xmm15, %xmm15
        vpxor	%xmm4, %xmm5, %xmm5
        vpxor	%xmm5, %xmm2, %xmm2
        vpxor	%xmm3, %xmm2, %xmm2
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqa	224(%rdi), %xmm7
L_AES_GCM_decrypt_update_avx1_aesenc_128_ghash_avx_done:
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	32(%rcx), %xmm0
        vmovdqu	48(%rcx), %xmm1
        vpxor	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm11, %xmm11
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rcx), %xmm0
        vmovdqu	112(%rcx), %xmm1
        vpxor	%xmm0, %xmm14, %xmm14
        vpxor	%xmm1, %xmm15, %xmm15
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_avx1_ghash_128
        vmovdqa	%xmm2, %xmm6
        vmovdqu	(%rsp), %xmm5
L_AES_GCM_decrypt_update_avx1_done_128:
        movl	%r8d, %edx
        cmpl	%edx, %r14d
        jge	L_AES_GCM_decrypt_update_avx1_done_dec
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_decrypt_update_avx1_last_block_done
L_AES_GCM_decrypt_update_avx1_last_block_start:
        vmovdqu	(%r11,%r14,1), %xmm13
        vmovdqa	%xmm5, %xmm0
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm13, %xmm1
        vpxor	%xmm6, %xmm1, %xmm1
        vmovdqu	(%r12), %xmm9
        vpshufb	L_avx1_aes_gcm_bswap_epi64(%rip), %xmm9, %xmm8
        vpaddd	L_avx1_aes_gcm_one(%rip), %xmm9, %xmm9
        vmovdqu	%xmm9, (%r12)
        vpxor	(%rdi), %xmm8, %xmm8
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm10
        vaesenc	16(%rdi), %xmm8, %xmm8
        vaesenc	32(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm11
        vaesenc	48(%rdi), %xmm8, %xmm8
        vaesenc	64(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm12
        vaesenc	80(%rdi), %xmm8, %xmm8
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vaesenc	96(%rdi), %xmm8, %xmm8
        vpxor	%xmm11, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm2
        vpsrldq	$8, %xmm10, %xmm10
        vaesenc	112(%rdi), %xmm8, %xmm8
        vpxor	%xmm12, %xmm2, %xmm2
        vpxor	%xmm10, %xmm1, %xmm3
        vmovdqa	L_avx1_aes_gcm_mod2_128(%rip), %xmm0
        vpclmulqdq	$16, %xmm0, %xmm2, %xmm11
        vaesenc	128(%rdi), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm2, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm0, %xmm10, %xmm11
        vaesenc	144(%rdi), %xmm8, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpxor	%xmm11, %xmm10, %xmm10
        vpxor	%xmm3, %xmm10, %xmm6
        cmpl	$11, %esi
        vmovdqa	160(%rdi), %xmm9
        jl	L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	176(%rdi), %xmm8, %xmm8
        cmpl	$13, %esi
        vmovdqa	192(%rdi), %xmm9
        jl	L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last
        vaesenc	%xmm9, %xmm8, %xmm8
        vaesenc	208(%rdi), %xmm8, %xmm8
        vmovdqa	224(%rdi), %xmm9
L_AES_GCM_decrypt_update_avx1_aesenc_gfmul_last:
        vaesenclast	%xmm9, %xmm8, %xmm8
        vmovdqa	%xmm13, %xmm0
        vpxor	%xmm0, %xmm8, %xmm8
        vmovdqu	%xmm8, (%r10,%r14,1)
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_avx1_last_block_start
L_AES_GCM_decrypt_update_avx1_last_block_done:
L_AES_GCM_decrypt_update_avx1_done_dec:
        vmovdqa	%xmm6, (%r9)
        vzeroupper
        addq	$0xa8, %rsp
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_update_avx1,.-AES_GCM_decrypt_update_avx1
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_final_avx1
.type	AES_GCM_decrypt_final_avx1,@function
.align	16
AES_GCM_decrypt_final_avx1:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_final_avx1
.p2align	4
_AES_GCM_decrypt_final_avx1:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%rbp
        pushq	%r12
        movl	%edx, %eax
        movl	%ecx, %r10d
        movl	%r8d, %r11d
        movq	32(%rsp), %r8
        movq	40(%rsp), %rbp
        subq	$16, %rsp
        vmovdqa	(%rdi), %xmm6
        vmovdqa	(%r9), %xmm5
        vmovdqa	(%r8), %xmm15
        vpsrlq	$63, %xmm5, %xmm8
        vpsllq	$0x01, %xmm5, %xmm7
        vpslldq	$8, %xmm8, %xmm8
        vpor	%xmm8, %xmm7, %xmm7
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx1_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm7, %xmm5, %xmm5
        movl	%r10d, %edx
        movl	%r11d, %ecx
        shlq	$3, %rdx
        shlq	$3, %rcx
        vmovq	%rdx, %xmm0
        vmovq	%rcx, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_red_avx
        vpshufd	$0x4e, %xmm5, %xmm8
        vpshufd	$0x4e, %xmm6, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm7
        vpxor	%xmm5, %xmm8, %xmm8
        vpxor	%xmm6, %xmm9, %xmm9
        vpclmulqdq	$0x00, %xmm9, %xmm8, %xmm8
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm10, %xmm8, %xmm8
        vpslldq	$8, %xmm8, %xmm9
        vpsrldq	$8, %xmm8, %xmm8
        vpxor	%xmm9, %xmm7, %xmm7
        vpxor	%xmm8, %xmm10, %xmm6
        vpslld	$31, %xmm7, %xmm11
        vpslld	$30, %xmm7, %xmm12
        vpslld	$25, %xmm7, %xmm13
        vpxor	%xmm12, %xmm11, %xmm11
        vpxor	%xmm13, %xmm11, %xmm11
        vpsrldq	$4, %xmm11, %xmm12
        vpslldq	$12, %xmm11, %xmm11
        vpxor	%xmm11, %xmm7, %xmm7
        vpsrld	$0x01, %xmm7, %xmm13
        vpsrld	$2, %xmm7, %xmm9
        vpsrld	$7, %xmm7, %xmm8
        vpxor	%xmm9, %xmm13, %xmm13
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm13, %xmm13
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm13, %xmm6, %xmm6
        vpshufb	L_avx1_aes_gcm_bswap_mask(%rip), %xmm6, %xmm6
        vpxor	%xmm15, %xmm6, %xmm0
        cmpl	$16, %eax
        je	L_AES_GCM_decrypt_final_avx1_cmp_tag_16
        subq	$16, %rsp
        xorq	%rcx, %rcx
        xorq	%r12, %r12
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_final_avx1_cmp_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        xorb	(%rsi,%rcx,1), %r13b
        orb	%r13b, %r12b
        incl	%ecx
        cmpl	%eax, %ecx
        jne	L_AES_GCM_decrypt_final_avx1_cmp_tag_loop
        cmpb	$0x00, %r12b
        sete	%r12b
        addq	$16, %rsp
        xorq	%rcx, %rcx
        jmp	L_AES_GCM_decrypt_final_avx1_cmp_tag_done
L_AES_GCM_decrypt_final_avx1_cmp_tag_16:
        vmovdqu	(%rsi), %xmm1
        vpcmpeqb	%xmm1, %xmm0, %xmm0
        vpmovmskb	%xmm0, %rdx
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%r12d, %r12d
        cmpl	$0xffff, %edx
        sete	%r12b
L_AES_GCM_decrypt_final_avx1_cmp_tag_done:
        movl	%r12d, (%rbp)
        vzeroupper
        addq	$16, %rsp
        popq	%r12
        popq	%rbp
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_final_avx1,.-AES_GCM_decrypt_final_avx1
#endif /* __APPLE__ */
#endif /* WOLFSSL_AESGCM_STREAM */
#endif /* HAVE_INTEL_AVX1 */
#ifdef HAVE_INTEL_AVX2
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx2_rev8:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx2_mod2_128:
.quad	0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl	GCM_generate_m0_avx2
.type	GCM_generate_m0_avx2,@function
.align	16
GCM_generate_m0_avx2:
#else
.section	__TEXT,__text
.globl	_GCM_generate_m0_avx2
.p2align	4
_GCM_generate_m0_avx2:
#endif /* __APPLE__ */
        vmovdqu	L_GCM_generate_m0_avx2_rev8(%rip), %xmm9
        vmovdqu	L_GCM_generate_m0_avx2_mod2_128(%rip), %xmm10
        vpxor	%xmm8, %xmm8, %xmm8
        vmovdqu	(%rdi), %xmm0
        vmovdqu	%xmm8, (%rsi)
        vmovdqu	%xmm0, %xmm8
        vpshufb	%xmm9, %xmm0, %xmm0
        vpsllq	$63, %xmm0, %xmm5
        vpsrlq	$0x01, %xmm0, %xmm4
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm1, %xmm1
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm1, %xmm1
        vpand	%xmm10, %xmm1, %xmm1
        vpxor	%xmm4, %xmm1, %xmm1
        vpsllq	$63, %xmm1, %xmm5
        vpsrlq	$0x01, %xmm1, %xmm4
        vpslldq	$8, %xmm5, %xmm2
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm2, %xmm2
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm2, %xmm2
        vpand	%xmm10, %xmm2, %xmm2
        vpxor	%xmm4, %xmm2, %xmm2
        vpsllq	$63, %xmm2, %xmm5
        vpsrlq	$0x01, %xmm2, %xmm4
        vpslldq	$8, %xmm5, %xmm3
        vpsrldq	$8, %xmm5, %xmm5
        vpshufd	$0xff, %xmm3, %xmm3
        vpor	%xmm5, %xmm4, %xmm4
        vpsrad	$31, %xmm3, %xmm3
        vpand	%xmm10, %xmm3, %xmm3
        vpxor	%xmm4, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpxor	%xmm2, %xmm3, %xmm8
        vmovdqu	%xmm3, 16(%rsi)
        vmovdqu	%xmm2, 32(%rsi)
        vmovdqu	%xmm8, 48(%rsi)
        vmovdqu	%xmm1, 64(%rsi)
        vpxor	%xmm1, %xmm3, %xmm4
        vpxor	%xmm1, %xmm2, %xmm5
        vpxor	%xmm1, %xmm8, %xmm6
        vmovdqu	%xmm4, 80(%rsi)
        vmovdqu	%xmm5, 96(%rsi)
        vmovdqu	%xmm6, 112(%rsi)
        vmovdqu	%xmm0, 128(%rsi)
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm0, %xmm3, %xmm4
        vpxor	%xmm0, %xmm2, %xmm6
        vmovdqu	%xmm4, 144(%rsi)
        vmovdqu	%xmm6, 160(%rsi)
        vpxor	%xmm6, %xmm3, %xmm6
        vmovdqu	%xmm6, 176(%rsi)
        vmovdqu	%xmm1, 192(%rsi)
        vpxor	%xmm1, %xmm3, %xmm4
        vpxor	%xmm1, %xmm2, %xmm5
        vpxor	%xmm1, %xmm8, %xmm6
        vmovdqu	%xmm4, 208(%rsi)
        vmovdqu	%xmm5, 224(%rsi)
        vmovdqu	%xmm6, 240(%rsi)
        vmovdqu	(%rsi), %xmm0
        vmovdqu	16(%rsi), %xmm1
        vmovdqu	32(%rsi), %xmm2
        vmovdqu	48(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 256(%rsi)
        vmovdqu	%xmm1, 272(%rsi)
        vmovdqu	%xmm2, 288(%rsi)
        vmovdqu	%xmm3, 304(%rsi)
        vmovdqu	64(%rsi), %xmm0
        vmovdqu	80(%rsi), %xmm1
        vmovdqu	96(%rsi), %xmm2
        vmovdqu	112(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 320(%rsi)
        vmovdqu	%xmm1, 336(%rsi)
        vmovdqu	%xmm2, 352(%rsi)
        vmovdqu	%xmm3, 368(%rsi)
        vmovdqu	128(%rsi), %xmm0
        vmovdqu	144(%rsi), %xmm1
        vmovdqu	160(%rsi), %xmm2
        vmovdqu	176(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 384(%rsi)
        vmovdqu	%xmm1, 400(%rsi)
        vmovdqu	%xmm2, 416(%rsi)
        vmovdqu	%xmm3, 432(%rsi)
        vmovdqu	192(%rsi), %xmm0
        vmovdqu	208(%rsi), %xmm1
        vmovdqu	224(%rsi), %xmm2
        vmovdqu	240(%rsi), %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vpsllq	$60, %xmm0, %xmm4
        vpsllq	$60, %xmm1, %xmm5
        vpsllq	$60, %xmm2, %xmm6
        vpsllq	$60, %xmm3, %xmm7
        vpsrlq	$4, %xmm0, %xmm0
        vpsrlq	$4, %xmm1, %xmm1
        vpsrlq	$4, %xmm2, %xmm2
        vpsrlq	$4, %xmm3, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpsrldq	$8, %xmm5, %xmm5
        vpsrldq	$8, %xmm6, %xmm6
        vpsrldq	$8, %xmm7, %xmm7
        vpor	%xmm4, %xmm0, %xmm0
        vpor	%xmm5, %xmm1, %xmm1
        vpor	%xmm6, %xmm2, %xmm2
        vpor	%xmm7, %xmm3, %xmm3
        vpshufb	%xmm9, %xmm0, %xmm0
        vpshufb	%xmm9, %xmm1, %xmm1
        vpshufb	%xmm9, %xmm2, %xmm2
        vpshufb	%xmm9, %xmm3, %xmm3
        vmovdqu	%xmm0, 448(%rsi)
        vmovdqu	%xmm1, 464(%rsi)
        vmovdqu	%xmm2, 480(%rsi)
        vmovdqu	%xmm3, 496(%rsi)
        repz retq
#ifndef __APPLE__
.size	GCM_generate_m0_avx2,.-GCM_generate_m0_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_one:
.quad	0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_two:
.quad	0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_three:
.quad	0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_four:
.quad	0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_five:
.quad	0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_six:
.quad	0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_seven:
.quad	0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_eight:
.quad	0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_one:
.quad	0x0000000000000000,0x0100000000000000
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_epi64:
.quad	0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_mask:
.quad	0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
.section	__DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align	16
#else
.p2align	4
#endif /* __APPLE__ */
L_avx2_aes_gcm_mod2_128:
.quad	0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_avx2
.type	AES_GCM_encrypt_avx2,@function
.align	16
AES_GCM_encrypt_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_avx2
.p2align	4
_AES_GCM_encrypt_avx2:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r15
        pushq	%rbx
        pushq	%r14
        movq	%rdx, %r12
        movq	%rcx, %rax
        movq	%r8, %r15
        movq	%rsi, %r8
        movl	%r9d, %r10d
        movl	48(%rsp), %r11d
        movl	56(%rsp), %ebx
        movl	64(%rsp), %r14d
        movq	72(%rsp), %rsi
        movl	80(%rsp), %r9d
        subq	$0xa0, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        vpxor	%xmm6, %xmm6, %xmm6
        movl	%ebx, %edx
        cmpl	$12, %edx
        je	L_AES_GCM_encrypt_avx2_iv_12
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqu	(%rsi), %xmm5
        vaesenc	16(%rsi), %xmm5, %xmm5
        vaesenc	32(%rsi), %xmm5, %xmm5
        vaesenc	48(%rsi), %xmm5, %xmm5
        vaesenc	64(%rsi), %xmm5, %xmm5
        vaesenc	80(%rsi), %xmm5, %xmm5
        vaesenc	96(%rsi), %xmm5, %xmm5
        vaesenc	112(%rsi), %xmm5, %xmm5
        vaesenc	128(%rsi), %xmm5, %xmm5
        vaesenc	144(%rsi), %xmm5, %xmm5
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	176(%rsi), %xmm5, %xmm5
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	208(%rsi), %xmm5, %xmm5
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_encrypt_avx2_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_encrypt_avx2_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_avx2_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_avx2_calc_iv_16_loop:
        vmovdqu	(%rax,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx2_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_avx2_calc_iv_done
L_AES_GCM_encrypt_avx2_calc_iv_lt16:
        vpxor	%xmm0, %xmm0, %xmm0
        xorl	%ebx, %ebx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_avx2_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx2_calc_iv_loop
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
L_AES_GCM_encrypt_avx2_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqu	(%rsi), %xmm15
        vpxor	%xmm4, %xmm15, %xmm15
        vaesenc	16(%rsi), %xmm15, %xmm15
        vaesenc	32(%rsi), %xmm15, %xmm15
        vaesenc	48(%rsi), %xmm15, %xmm15
        vaesenc	64(%rsi), %xmm15, %xmm15
        vaesenc	80(%rsi), %xmm15, %xmm15
        vaesenc	96(%rsi), %xmm15, %xmm15
        vaesenc	112(%rsi), %xmm15, %xmm15
        vaesenc	128(%rsi), %xmm15, %xmm15
        vaesenc	144(%rsi), %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm15, %xmm15
        vaesenc	176(%rsi), %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm15, %xmm15
        vaesenc	208(%rsi), %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_encrypt_avx2_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm15, %xmm15
        jmp	L_AES_GCM_encrypt_avx2_iv_done
L_AES_GCM_encrypt_avx2_iv_12:
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        vmovdqu	L_avx2_aes_gcm_bswap_one(%rip), %xmm4
        vmovdqu	(%rsi), %xmm5
        vpblendd	$7, (%rax), %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqu	16(%rsi), %xmm7
        vpxor	%xmm5, %xmm4, %xmm15
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	32(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	48(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	64(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	80(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	96(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	112(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	128(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	144(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	176(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	208(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_encrypt_avx2_calc_iv_12_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vaesenclast	%xmm0, %xmm15, %xmm15
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
L_AES_GCM_encrypt_avx2_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_encrypt_avx2_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_encrypt_avx2_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_encrypt_avx2_calc_aad_16_loop:
        vmovdqu	(%r12,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm6, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm6, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm6
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx2_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_encrypt_avx2_calc_aad_done
L_AES_GCM_encrypt_avx2_calc_aad_lt16:
        vpxor	%xmm0, %xmm0, %xmm0
        xorl	%ebx, %ebx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_avx2_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_encrypt_avx2_calc_aad_loop
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm6, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm6, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm6
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
L_AES_GCM_encrypt_avx2_calc_aad_done:
        # Calculate counter and H
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm0, %xmm5, %xmm5
        xorl	%ebx, %ebx
        cmpl	$0x80, %r10d
        movl	%r10d, %r13d
        jl	L_AES_GCM_encrypt_avx2_done_128
        andl	$0xffffff80, %r13d
        vmovdqu	%xmm4, 128(%rsp)
        vmovdqu	%xmm15, 144(%rsp)
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm3
        # H ^ 1 and H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm9, %xmm10, %xmm0
        vmovdqu	%xmm5, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3 and H ^ 4
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm12
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm13
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm2
        vpxor	%xmm9, %xmm10, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        vmovdqu	%xmm2, 48(%rsp)
        # H ^ 5 and H ^ 6
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm10
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm9
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm12
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm13
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        vmovdqu	%xmm0, 80(%rsp)
        # H ^ 7 and H ^ 8
        vpclmulqdq	$16, %xmm1, %xmm2, %xmm11
        vpclmulqdq	$0x01, %xmm1, %xmm2, %xmm10
        vpclmulqdq	$0x00, %xmm1, %xmm2, %xmm9
        vpclmulqdq	$0x11, %xmm1, %xmm2, %xmm12
        vpclmulqdq	$0x00, %xmm2, %xmm2, %xmm13
        vpclmulqdq	$0x11, %xmm2, %xmm2, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        vmovdqu	%xmm0, 112(%rsp)
        # First 128 bytes of input
        # aesenc_128
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rsi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	16(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	32(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	48(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	80(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	128(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	144(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm7
        jl	L_AES_GCM_encrypt_avx2_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm7
        jl	L_AES_GCM_encrypt_avx2_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm7
L_AES_GCM_encrypt_avx2_aesenc_128_enc_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%rdi), %xmm0
        vmovdqu	16(%rdi), %xmm1
        vmovdqu	32(%rdi), %xmm2
        vmovdqu	48(%rdi), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%r8)
        vmovdqu	%xmm9, 16(%r8)
        vmovdqu	%xmm10, 32(%r8)
        vmovdqu	%xmm11, 48(%r8)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rdi), %xmm0
        vmovdqu	80(%rdi), %xmm1
        vmovdqu	96(%rdi), %xmm2
        vmovdqu	112(%rdi), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%r8)
        vmovdqu	%xmm13, 80(%r8)
        vmovdqu	%xmm14, 96(%r8)
        vmovdqu	%xmm15, 112(%r8)
        cmpl	$0x80, %r13d
        movl	$0x80, %ebx
        jle	L_AES_GCM_encrypt_avx2_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_avx2_ghash_128:
        # aesenc_128_ghash
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%r8,%rbx,1), %rdx
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rsi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        # aesenc_pclmul_1
        vmovdqu	-128(%rdx), %xmm1
        vmovdqu	16(%rsi), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vmovdqu	112(%rsp), %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm5
        vpclmulqdq	$0x01, %xmm2, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm6
        vpclmulqdq	$0x11, %xmm2, %xmm1, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_2
        vmovdqu	-112(%rdx), %xmm1
        vmovdqu	96(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	32(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-96(%rdx), %xmm1
        vmovdqu	80(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	48(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-80(%rdx), %xmm1
        vmovdqu	64(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	64(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-64(%rdx), %xmm1
        vmovdqu	48(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	80(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-48(%rdx), %xmm1
        vmovdqu	32(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	96(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-32(%rdx), %xmm1
        vmovdqu	16(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	112(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-16(%rdx), %xmm1
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	128(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_l
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm4, %xmm6, %xmm6
        vpxor	%xmm3, %xmm5, %xmm5
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vmovdqu	144(%rsi), %xmm4
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm0
        vaesenc	%xmm4, %xmm8, %xmm8
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm5, %xmm7, %xmm7
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm9, %xmm9
        vaesenc	%xmm4, %xmm10, %xmm10
        vaesenc	%xmm4, %xmm11, %xmm11
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm12, %xmm12
        vaesenc	%xmm4, %xmm13, %xmm13
        vaesenc	%xmm4, %xmm14, %xmm14
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm7, %xmm6, %xmm6
        vaesenc	%xmm4, %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm7
        jl	L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm7
        jl	L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm7
L_AES_GCM_encrypt_avx2_aesenc_128_ghash_avx_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	32(%rcx), %xmm2
        vmovdqu	48(%rcx), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	96(%rcx), %xmm2
        vmovdqu	112(%rcx), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        # aesenc_128_ghash - end
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_avx2_ghash_128
L_AES_GCM_encrypt_avx2_end_128:
        vmovdqu	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4
        vpshufb	%xmm4, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm9, %xmm9
        vpshufb	%xmm4, %xmm10, %xmm10
        vpshufb	%xmm4, %xmm11, %xmm11
        vpshufb	%xmm4, %xmm12, %xmm12
        vpshufb	%xmm4, %xmm13, %xmm13
        vpshufb	%xmm4, %xmm14, %xmm14
        vpshufb	%xmm4, %xmm15, %xmm15
        vpxor	%xmm6, %xmm8, %xmm8
        vmovdqu	(%rsp), %xmm7
        vpclmulqdq	$16, %xmm15, %xmm7, %xmm5
        vpclmulqdq	$0x01, %xmm15, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm15, %xmm7, %xmm4
        vpclmulqdq	$0x11, %xmm15, %xmm7, %xmm6
        vpxor	%xmm1, %xmm5, %xmm5
        vmovdqu	16(%rsp), %xmm7
        vpclmulqdq	$16, %xmm14, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm14, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm14, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm14, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	32(%rsp), %xmm15
        vmovdqu	48(%rsp), %xmm7
        vpclmulqdq	$16, %xmm13, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm13, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm13, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm13, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm12, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm12, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm12, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm12, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	64(%rsp), %xmm15
        vmovdqu	80(%rsp), %xmm7
        vpclmulqdq	$16, %xmm11, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm11, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm11, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm11, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm10, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm10, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm10, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm10, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	96(%rsp), %xmm15
        vmovdqu	112(%rsp), %xmm7
        vpclmulqdq	$16, %xmm9, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm9, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm9, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm9, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm8, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm8, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm8, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm8, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpslldq	$8, %xmm5, %xmm7
        vpsrldq	$8, %xmm5, %xmm5
        vpxor	%xmm7, %xmm4, %xmm4
        vpxor	%xmm5, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm4, %xmm0
        vpshufd	$0x4e, %xmm4, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	(%rsp), %xmm5
        vmovdqu	128(%rsp), %xmm4
        vmovdqu	144(%rsp), %xmm15
L_AES_GCM_encrypt_avx2_done_128:
        cmpl	%r10d, %ebx
        je	L_AES_GCM_encrypt_avx2_done_enc
        movl	%r10d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_avx2_last_block_done
        # aesenc_block
        vmovdqu	%xmm4, %xmm1
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
        vpxor	(%rsi), %xmm0, %xmm0
        vmovdqu	16(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	32(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	48(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	64(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	80(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	96(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	112(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	128(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	144(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	%xmm1, %xmm4
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm1
        jl	L_AES_GCM_encrypt_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	176(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm1
        jl	L_AES_GCM_encrypt_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	208(%rsi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	224(%rsi), %xmm1
L_AES_GCM_encrypt_avx2_aesenc_block_last:
        vaesenclast	%xmm1, %xmm0, %xmm0
        vmovdqu	(%rdi,%rbx,1), %xmm1
        vpxor	%xmm1, %xmm0, %xmm0
        vmovdqu	%xmm0, (%r8,%rbx,1)
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_encrypt_avx2_last_block_ghash
L_AES_GCM_encrypt_avx2_last_block_start:
        vmovdqu	(%rdi,%rbx,1), %xmm12
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm11
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        # aesenc_gfmul_sb
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm2
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm8
        vpxor	(%rsi), %xmm11, %xmm11
        vaesenc	16(%rsi), %xmm11, %xmm11
        vpxor	%xmm2, %xmm3, %xmm3
        vpslldq	$8, %xmm3, %xmm2
        vpsrldq	$8, %xmm3, %xmm3
        vaesenc	32(%rsi), %xmm11, %xmm11
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	48(%rsi), %xmm11, %xmm11
        vaesenc	64(%rsi), %xmm11, %xmm11
        vaesenc	80(%rsi), %xmm11, %xmm11
        vpshufd	$0x4e, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	96(%rsi), %xmm11, %xmm11
        vaesenc	112(%rsi), %xmm11, %xmm11
        vaesenc	128(%rsi), %xmm11, %xmm11
        vpshufd	$0x4e, %xmm2, %xmm2
        vaesenc	144(%rsi), %xmm11, %xmm11
        vpxor	%xmm3, %xmm8, %xmm8
        vpxor	%xmm8, %xmm2, %xmm2
        vmovdqu	160(%rsi), %xmm0
        cmpl	$11, %r9d
        jl	L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	176(%rsi), %xmm11, %xmm11
        vmovdqu	192(%rsi), %xmm0
        cmpl	$13, %r9d
        jl	L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	208(%rsi), %xmm11, %xmm11
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_encrypt_avx2_aesenc_gfmul_sb_last:
        vaesenclast	%xmm0, %xmm11, %xmm11
        vpxor	%xmm1, %xmm2, %xmm6
        vpxor	%xmm12, %xmm11, %xmm11
        vmovdqu	%xmm11, (%r8,%rbx,1)
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm11
        vpxor	%xmm11, %xmm6, %xmm6
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_encrypt_avx2_last_block_start
L_AES_GCM_encrypt_avx2_last_block_ghash:
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm10
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm9
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm9, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm9
        vpsrldq	$8, %xmm10, %xmm10
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm6
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm10, %xmm6, %xmm6
        vpxor	%xmm9, %xmm6, %xmm6
        vpxor	%xmm8, %xmm6, %xmm6
L_AES_GCM_encrypt_avx2_last_block_done:
        movl	%r10d, %ecx
        movl	%r10d, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_encrypt_avx2_done_enc
        # aesenc_last15_enc
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpxor	(%rsi), %xmm4, %xmm4
        vaesenc	16(%rsi), %xmm4, %xmm4
        vaesenc	32(%rsi), %xmm4, %xmm4
        vaesenc	48(%rsi), %xmm4, %xmm4
        vaesenc	64(%rsi), %xmm4, %xmm4
        vaesenc	80(%rsi), %xmm4, %xmm4
        vaesenc	96(%rsi), %xmm4, %xmm4
        vaesenc	112(%rsi), %xmm4, %xmm4
        vaesenc	128(%rsi), %xmm4, %xmm4
        vaesenc	144(%rsi), %xmm4, %xmm4
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last
        vaesenc	%xmm0, %xmm4, %xmm4
        vaesenc	176(%rsi), %xmm4, %xmm4
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last
        vaesenc	%xmm0, %xmm4, %xmm4
        vaesenc	208(%rsi), %xmm4, %xmm4
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm4, %xmm4
        xorl	%ecx, %ecx
        vpxor	%xmm0, %xmm0, %xmm0
        vmovdqu	%xmm4, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, 16(%rsp,%rcx,1)
        movb	%r13b, (%r8,%rbx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_loop
L_AES_GCM_encrypt_avx2_aesenc_last15_enc_avx_finish_enc:
        vmovdqu	16(%rsp), %xmm4
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        vpxor	%xmm4, %xmm6, %xmm6
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm2
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm1
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm0
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm6
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm0, %xmm6, %xmm6
L_AES_GCM_encrypt_avx2_done_enc:
        # calc_tag
        shlq	$3, %r10
        shlq	$3, %r11
        vmovq	%r10, %xmm0
        vmovq	%r11, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm4
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm2
        vpxor	%xmm3, %xmm4, %xmm4
        vpslldq	$8, %xmm4, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm0
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm4, %xmm0, %xmm0
        vpxor	%xmm3, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm15, %xmm0, %xmm0
        # store_tag
        cmpl	$16, %r14d
        je	L_AES_GCM_encrypt_avx2_store_tag_16
        xorq	%rcx, %rcx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_avx2_store_tag_loop:
        movzbl	(%rsp,%rcx,1), %r13d
        movb	%r13b, (%r15,%rcx,1)
        incl	%ecx
        cmpl	%r14d, %ecx
        jne	L_AES_GCM_encrypt_avx2_store_tag_loop
        jmp	L_AES_GCM_encrypt_avx2_store_tag_done
L_AES_GCM_encrypt_avx2_store_tag_16:
        vmovdqu	%xmm0, (%r15)
L_AES_GCM_encrypt_avx2_store_tag_done:
        vzeroupper
        addq	$0xa0, %rsp
        popq	%r14
        popq	%rbx
        popq	%r15
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_avx2,.-AES_GCM_encrypt_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_avx2
.type	AES_GCM_decrypt_avx2,@function
.align	16
AES_GCM_decrypt_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_avx2
.p2align	4
_AES_GCM_decrypt_avx2:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        pushq	%rbx
        pushq	%r15
        pushq	%rbp
        movq	%rdx, %r12
        movq	%rcx, %rax
        movq	%r8, %r14
        movq	%rsi, %r8
        movl	%r9d, %r10d
        movl	56(%rsp), %r11d
        movl	64(%rsp), %ebx
        movl	72(%rsp), %r15d
        movq	80(%rsp), %rsi
        movl	88(%rsp), %r9d
        movq	96(%rsp), %rbp
        subq	$0xa8, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        vpxor	%xmm6, %xmm6, %xmm6
        movl	%ebx, %edx
        cmpl	$12, %edx
        je	L_AES_GCM_decrypt_avx2_iv_12
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqu	(%rsi), %xmm5
        vaesenc	16(%rsi), %xmm5, %xmm5
        vaesenc	32(%rsi), %xmm5, %xmm5
        vaesenc	48(%rsi), %xmm5, %xmm5
        vaesenc	64(%rsi), %xmm5, %xmm5
        vaesenc	80(%rsi), %xmm5, %xmm5
        vaesenc	96(%rsi), %xmm5, %xmm5
        vaesenc	112(%rsi), %xmm5, %xmm5
        vaesenc	128(%rsi), %xmm5, %xmm5
        vaesenc	144(%rsi), %xmm5, %xmm5
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	176(%rsi), %xmm5, %xmm5
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	208(%rsi), %xmm5, %xmm5
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_decrypt_avx2_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_decrypt_avx2_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_avx2_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_avx2_calc_iv_16_loop:
        vmovdqu	(%rax,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx2_calc_iv_16_loop
        movl	%ebx, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_avx2_calc_iv_done
L_AES_GCM_decrypt_avx2_calc_iv_lt16:
        vpxor	%xmm0, %xmm0, %xmm0
        xorl	%ebx, %ebx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_avx2_calc_iv_loop:
        movzbl	(%rax,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx2_calc_iv_loop
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
L_AES_GCM_decrypt_avx2_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqu	(%rsi), %xmm15
        vpxor	%xmm4, %xmm15, %xmm15
        vaesenc	16(%rsi), %xmm15, %xmm15
        vaesenc	32(%rsi), %xmm15, %xmm15
        vaesenc	48(%rsi), %xmm15, %xmm15
        vaesenc	64(%rsi), %xmm15, %xmm15
        vaesenc	80(%rsi), %xmm15, %xmm15
        vaesenc	96(%rsi), %xmm15, %xmm15
        vaesenc	112(%rsi), %xmm15, %xmm15
        vaesenc	128(%rsi), %xmm15, %xmm15
        vaesenc	144(%rsi), %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm15, %xmm15
        vaesenc	176(%rsi), %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm15, %xmm15
        vaesenc	208(%rsi), %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_decrypt_avx2_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm15, %xmm15
        jmp	L_AES_GCM_decrypt_avx2_iv_done
L_AES_GCM_decrypt_avx2_iv_12:
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        vmovdqu	L_avx2_aes_gcm_bswap_one(%rip), %xmm4
        vmovdqu	(%rsi), %xmm5
        vpblendd	$7, (%rax), %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqu	16(%rsi), %xmm7
        vpxor	%xmm5, %xmm4, %xmm15
        vaesenc	%xmm7, %xmm5, %xmm5
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	32(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	48(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	64(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	80(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	96(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	112(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	128(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	144(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	176(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm0
        jl	L_AES_GCM_decrypt_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	208(%rsi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_decrypt_avx2_calc_iv_12_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vaesenclast	%xmm0, %xmm15, %xmm15
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
L_AES_GCM_decrypt_avx2_iv_done:
        # Additional authentication data
        movl	%r11d, %edx
        cmpl	$0x00, %edx
        je	L_AES_GCM_decrypt_avx2_calc_aad_done
        xorl	%ecx, %ecx
        cmpl	$16, %edx
        jl	L_AES_GCM_decrypt_avx2_calc_aad_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_decrypt_avx2_calc_aad_16_loop:
        vmovdqu	(%r12,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm6, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm6, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm6
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx2_calc_aad_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_decrypt_avx2_calc_aad_done
L_AES_GCM_decrypt_avx2_calc_aad_lt16:
        vpxor	%xmm0, %xmm0, %xmm0
        xorl	%ebx, %ebx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_avx2_calc_aad_loop:
        movzbl	(%r12,%rcx,1), %r13d
        movb	%r13b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_decrypt_avx2_calc_aad_loop
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm6, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm6, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm6, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm6, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm7
        vpxor	%xmm2, %xmm3, %xmm6
        # ghash_mid
        vpsrld	$31, %xmm7, %xmm0
        vpsrld	$31, %xmm6, %xmm1
        vpslld	$0x01, %xmm7, %xmm7
        vpslld	$0x01, %xmm6, %xmm6
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm6, %xmm6
        vpor	%xmm0, %xmm7, %xmm7
        vpor	%xmm1, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm7, %xmm0
        vpshufd	$0x4e, %xmm7, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
L_AES_GCM_decrypt_avx2_calc_aad_done:
        # Calculate counter and H
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm0, %xmm5, %xmm5
        xorl	%ebx, %ebx
        cmpl	$0x80, %r10d
        movl	%r10d, %r13d
        jl	L_AES_GCM_decrypt_avx2_done_128
        andl	$0xffffff80, %r13d
        vmovdqu	%xmm4, 128(%rsp)
        vmovdqu	%xmm15, 144(%rsp)
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm3
        # H ^ 1 and H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm9, %xmm10, %xmm0
        vmovdqu	%xmm5, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3 and H ^ 4
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm12
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm13
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm2
        vpxor	%xmm9, %xmm10, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        vmovdqu	%xmm2, 48(%rsp)
        # H ^ 5 and H ^ 6
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm10
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm9
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm12
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm13
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        vmovdqu	%xmm0, 80(%rsp)
        # H ^ 7 and H ^ 8
        vpclmulqdq	$16, %xmm1, %xmm2, %xmm11
        vpclmulqdq	$0x01, %xmm1, %xmm2, %xmm10
        vpclmulqdq	$0x00, %xmm1, %xmm2, %xmm9
        vpclmulqdq	$0x11, %xmm1, %xmm2, %xmm12
        vpclmulqdq	$0x00, %xmm2, %xmm2, %xmm13
        vpclmulqdq	$0x11, %xmm2, %xmm2, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        vmovdqu	%xmm0, 112(%rsp)
L_AES_GCM_decrypt_avx2_ghash_128:
        # aesenc_128_ghash
        leaq	(%rdi,%rbx,1), %rcx
        leaq	(%r8,%rbx,1), %rdx
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rsi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        # aesenc_pclmul_1
        vmovdqu	(%rcx), %xmm1
        vmovdqu	16(%rsi), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vmovdqu	112(%rsp), %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm5
        vpclmulqdq	$0x01, %xmm2, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm6
        vpclmulqdq	$0x11, %xmm2, %xmm1, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_2
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	96(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	32(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	32(%rcx), %xmm1
        vmovdqu	80(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	48(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	48(%rcx), %xmm1
        vmovdqu	64(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	64(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	64(%rcx), %xmm1
        vmovdqu	48(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	80(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	32(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	96(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	96(%rcx), %xmm1
        vmovdqu	16(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	112(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	112(%rcx), %xmm1
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	128(%rsi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_l
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm4, %xmm6, %xmm6
        vpxor	%xmm3, %xmm5, %xmm5
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vmovdqu	144(%rsi), %xmm4
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm0
        vaesenc	%xmm4, %xmm8, %xmm8
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm5, %xmm7, %xmm7
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm9, %xmm9
        vaesenc	%xmm4, %xmm10, %xmm10
        vaesenc	%xmm4, %xmm11, %xmm11
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm12, %xmm12
        vaesenc	%xmm4, %xmm13, %xmm13
        vaesenc	%xmm4, %xmm14, %xmm14
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm7, %xmm6, %xmm6
        vaesenc	%xmm4, %xmm15, %xmm15
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm7
        jl	L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm7
        jl	L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rsi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rsi), %xmm7
L_AES_GCM_decrypt_avx2_aesenc_128_ghash_avx_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	32(%rcx), %xmm2
        vmovdqu	48(%rcx), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	96(%rcx), %xmm2
        vmovdqu	112(%rcx), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        # aesenc_128_ghash - end
        addl	$0x80, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_avx2_ghash_128
        vmovdqu	(%rsp), %xmm5
        vmovdqu	128(%rsp), %xmm4
        vmovdqu	144(%rsp), %xmm15
L_AES_GCM_decrypt_avx2_done_128:
        cmpl	%r10d, %ebx
        jge	L_AES_GCM_decrypt_avx2_done_dec
        movl	%r10d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %ebx
        jge	L_AES_GCM_decrypt_avx2_last_block_done
L_AES_GCM_decrypt_avx2_last_block_start:
        vmovdqu	(%rdi,%rbx,1), %xmm11
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm10
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm12
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm6, %xmm12, %xmm12
        # aesenc_gfmul_sb
        vpclmulqdq	$0x01, %xmm5, %xmm12, %xmm2
        vpclmulqdq	$16, %xmm5, %xmm12, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm12, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm12, %xmm8
        vpxor	(%rsi), %xmm10, %xmm10
        vaesenc	16(%rsi), %xmm10, %xmm10
        vpxor	%xmm2, %xmm3, %xmm3
        vpslldq	$8, %xmm3, %xmm2
        vpsrldq	$8, %xmm3, %xmm3
        vaesenc	32(%rsi), %xmm10, %xmm10
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	48(%rsi), %xmm10, %xmm10
        vaesenc	64(%rsi), %xmm10, %xmm10
        vaesenc	80(%rsi), %xmm10, %xmm10
        vpshufd	$0x4e, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	96(%rsi), %xmm10, %xmm10
        vaesenc	112(%rsi), %xmm10, %xmm10
        vaesenc	128(%rsi), %xmm10, %xmm10
        vpshufd	$0x4e, %xmm2, %xmm2
        vaesenc	144(%rsi), %xmm10, %xmm10
        vpxor	%xmm3, %xmm8, %xmm8
        vpxor	%xmm8, %xmm2, %xmm2
        vmovdqu	160(%rsi), %xmm0
        cmpl	$11, %r9d
        jl	L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	176(%rsi), %xmm10, %xmm10
        vmovdqu	192(%rsi), %xmm0
        cmpl	$13, %r9d
        jl	L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	208(%rsi), %xmm10, %xmm10
        vmovdqu	224(%rsi), %xmm0
L_AES_GCM_decrypt_avx2_aesenc_gfmul_sb_last:
        vaesenclast	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm2, %xmm6
        vpxor	%xmm11, %xmm10, %xmm10
        vmovdqu	%xmm10, (%r8,%rbx,1)
        addl	$16, %ebx
        cmpl	%r13d, %ebx
        jl	L_AES_GCM_decrypt_avx2_last_block_start
L_AES_GCM_decrypt_avx2_last_block_done:
        movl	%r10d, %ecx
        movl	%r10d, %edx
        andl	$15, %ecx
        jz	L_AES_GCM_decrypt_avx2_done_dec
        # aesenc_last15_dec
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpxor	(%rsi), %xmm4, %xmm4
        vaesenc	16(%rsi), %xmm4, %xmm4
        vaesenc	32(%rsi), %xmm4, %xmm4
        vaesenc	48(%rsi), %xmm4, %xmm4
        vaesenc	64(%rsi), %xmm4, %xmm4
        vaesenc	80(%rsi), %xmm4, %xmm4
        vaesenc	96(%rsi), %xmm4, %xmm4
        vaesenc	112(%rsi), %xmm4, %xmm4
        vaesenc	128(%rsi), %xmm4, %xmm4
        vaesenc	144(%rsi), %xmm4, %xmm4
        cmpl	$11, %r9d
        vmovdqu	160(%rsi), %xmm1
        jl	L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last
        vaesenc	%xmm1, %xmm4, %xmm4
        vaesenc	176(%rsi), %xmm4, %xmm4
        cmpl	$13, %r9d
        vmovdqu	192(%rsi), %xmm1
        jl	L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last
        vaesenc	%xmm1, %xmm4, %xmm4
        vaesenc	208(%rsi), %xmm4, %xmm4
        vmovdqu	224(%rsi), %xmm1
L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_aesenc_avx_last:
        vaesenclast	%xmm1, %xmm4, %xmm4
        xorl	%ecx, %ecx
        vpxor	%xmm0, %xmm0, %xmm0
        vmovdqu	%xmm4, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_loop:
        movzbl	(%rdi,%rbx,1), %r13d
        movb	%r13b, 16(%rsp,%rcx,1)
        xorb	(%rsp,%rcx,1), %r13b
        movb	%r13b, (%r8,%rbx,1)
        incl	%ebx
        incl	%ecx
        cmpl	%edx, %ebx
        jl	L_AES_GCM_decrypt_avx2_aesenc_last15_dec_avx_loop
        vmovdqu	16(%rsp), %xmm4
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        vpxor	%xmm4, %xmm6, %xmm6
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm2
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm1
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm0
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm6
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm2, %xmm6, %xmm6
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm0, %xmm6, %xmm6
L_AES_GCM_decrypt_avx2_done_dec:
        # calc_tag
        shlq	$3, %r10
        shlq	$3, %r11
        vmovq	%r10, %xmm0
        vmovq	%r11, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm4
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm2
        vpxor	%xmm3, %xmm4, %xmm4
        vpslldq	$8, %xmm4, %xmm3
        vpsrldq	$8, %xmm4, %xmm4
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm0
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm4, %xmm0, %xmm0
        vpxor	%xmm3, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm15, %xmm0, %xmm0
        # cmp_tag
        cmpl	$16, %r15d
        je	L_AES_GCM_decrypt_avx2_cmp_tag_16
        xorq	%rdx, %rdx
        xorq	%rax, %rax
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_avx2_cmp_tag_loop:
        movzbl	(%rsp,%rdx,1), %r13d
        xorb	(%r14,%rdx,1), %r13b
        orb	%r13b, %al
        incl	%edx
        cmpl	%r15d, %edx
        jne	L_AES_GCM_decrypt_avx2_cmp_tag_loop
        cmpb	$0x00, %al
        sete	%al
        jmp	L_AES_GCM_decrypt_avx2_cmp_tag_done
L_AES_GCM_decrypt_avx2_cmp_tag_16:
        vmovdqu	(%r14), %xmm1
        vpcmpeqb	%xmm1, %xmm0, %xmm0
        vpmovmskb	%xmm0, %rdx
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%eax, %eax
        cmpl	$0xffff, %edx
        sete	%al
L_AES_GCM_decrypt_avx2_cmp_tag_done:
        movl	%eax, (%rbp)
        vzeroupper
        addq	$0xa8, %rsp
        popq	%rbp
        popq	%r15
        popq	%rbx
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_avx2,.-AES_GCM_decrypt_avx2
#endif /* __APPLE__ */
#ifdef WOLFSSL_AESGCM_STREAM
#ifndef __APPLE__
.text
.globl	AES_GCM_init_avx2
.type	AES_GCM_init_avx2,@function
.align	16
AES_GCM_init_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_init_avx2
.p2align	4
_AES_GCM_init_avx2:
#endif /* __APPLE__ */
        pushq	%rbx
        pushq	%r12
        movq	%rdx, %r10
        movl	%ecx, %r11d
        movq	24(%rsp), %rax
        subq	$16, %rsp
        vpxor	%xmm4, %xmm4, %xmm4
        movl	%r11d, %edx
        cmpl	$12, %edx
        je	L_AES_GCM_init_avx2_iv_12
        # Calculate values when IV is not 12 bytes
        # H = Encrypt X(=0)
        vmovdqu	(%rdi), %xmm5
        vaesenc	16(%rdi), %xmm5, %xmm5
        vaesenc	32(%rdi), %xmm5, %xmm5
        vaesenc	48(%rdi), %xmm5, %xmm5
        vaesenc	64(%rdi), %xmm5, %xmm5
        vaesenc	80(%rdi), %xmm5, %xmm5
        vaesenc	96(%rdi), %xmm5, %xmm5
        vaesenc	112(%rdi), %xmm5, %xmm5
        vaesenc	128(%rdi), %xmm5, %xmm5
        vaesenc	144(%rdi), %xmm5, %xmm5
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	176(%rdi), %xmm5, %xmm5
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	208(%rdi), %xmm5, %xmm5
        vmovdqu	224(%rdi), %xmm0
L_AES_GCM_init_avx2_calc_iv_1_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
        # Calc counter
        # Initialization vector
        cmpl	$0x00, %edx
        movq	$0x00, %rcx
        je	L_AES_GCM_init_avx2_calc_iv_done
        cmpl	$16, %edx
        jl	L_AES_GCM_init_avx2_calc_iv_lt16
        andl	$0xfffffff0, %edx
L_AES_GCM_init_avx2_calc_iv_16_loop:
        vmovdqu	(%r10,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm6
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm6, %xmm0
        vpshufd	$0x4e, %xmm6, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_avx2_calc_iv_16_loop
        movl	%r11d, %edx
        cmpl	%edx, %ecx
        je	L_AES_GCM_init_avx2_calc_iv_done
L_AES_GCM_init_avx2_calc_iv_lt16:
        vpxor	%xmm0, %xmm0, %xmm0
        xorl	%ebx, %ebx
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_init_avx2_calc_iv_loop:
        movzbl	(%r10,%rcx,1), %r12d
        movb	%r12b, (%rsp,%rbx,1)
        incl	%ecx
        incl	%ebx
        cmpl	%edx, %ecx
        jl	L_AES_GCM_init_avx2_calc_iv_loop
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm6
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm6, %xmm0
        vpshufd	$0x4e, %xmm6, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
L_AES_GCM_init_avx2_calc_iv_done:
        # T = Encrypt counter
        vpxor	%xmm0, %xmm0, %xmm0
        shll	$3, %edx
        vmovq	%rdx, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm6
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm6, %xmm0
        vpshufd	$0x4e, %xmm6, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4, %xmm4
        #   Encrypt counter
        vmovdqu	(%rdi), %xmm7
        vpxor	%xmm4, %xmm7, %xmm7
        vaesenc	16(%rdi), %xmm7, %xmm7
        vaesenc	32(%rdi), %xmm7, %xmm7
        vaesenc	48(%rdi), %xmm7, %xmm7
        vaesenc	64(%rdi), %xmm7, %xmm7
        vaesenc	80(%rdi), %xmm7, %xmm7
        vaesenc	96(%rdi), %xmm7, %xmm7
        vaesenc	112(%rdi), %xmm7, %xmm7
        vaesenc	128(%rdi), %xmm7, %xmm7
        vaesenc	144(%rdi), %xmm7, %xmm7
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm7, %xmm7
        vaesenc	176(%rdi), %xmm7, %xmm7
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last
        vaesenc	%xmm0, %xmm7, %xmm7
        vaesenc	208(%rdi), %xmm7, %xmm7
        vmovdqu	224(%rdi), %xmm0
L_AES_GCM_init_avx2_calc_iv_2_aesenc_avx_last:
        vaesenclast	%xmm0, %xmm7, %xmm7
        jmp	L_AES_GCM_init_avx2_iv_done
L_AES_GCM_init_avx2_iv_12:
        # # Calculate values when IV is 12 bytes
        # Set counter based on IV
        vmovdqu	L_avx2_aes_gcm_bswap_one(%rip), %xmm4
        vmovdqu	(%rdi), %xmm5
        vpblendd	$7, (%r10), %xmm4, %xmm4
        # H = Encrypt X(=0) and T = Encrypt counter
        vmovdqu	16(%rdi), %xmm6
        vpxor	%xmm5, %xmm4, %xmm7
        vaesenc	%xmm6, %xmm5, %xmm5
        vaesenc	%xmm6, %xmm7, %xmm7
        vmovdqu	32(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	48(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	64(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	80(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	96(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	112(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	128(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	144(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	176(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm0
        jl	L_AES_GCM_init_avx2_calc_iv_12_last
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	208(%rdi), %xmm0
        vaesenc	%xmm0, %xmm5, %xmm5
        vaesenc	%xmm0, %xmm7, %xmm7
        vmovdqu	224(%rdi), %xmm0
L_AES_GCM_init_avx2_calc_iv_12_last:
        vaesenclast	%xmm0, %xmm5, %xmm5
        vaesenclast	%xmm0, %xmm7, %xmm7
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm5, %xmm5
L_AES_GCM_init_avx2_iv_done:
        vmovdqu	%xmm7, (%rax)
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm4
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        vmovdqu	%xmm5, (%r8)
        vmovdqu	%xmm4, (%r9)
        vzeroupper
        addq	$16, %rsp
        popq	%r12
        popq	%rbx
        repz retq
#ifndef __APPLE__
.size	AES_GCM_init_avx2,.-AES_GCM_init_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_aad_update_avx2
.type	AES_GCM_aad_update_avx2,@function
.align	16
AES_GCM_aad_update_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_aad_update_avx2
.p2align	4
_AES_GCM_aad_update_avx2:
#endif /* __APPLE__ */
        movq	%rcx, %rax
        vmovdqu	(%rdx), %xmm4
        vmovdqu	(%rax), %xmm5
        xorl	%ecx, %ecx
L_AES_GCM_aad_update_avx2_16_loop:
        vmovdqu	(%rdi,%rcx,1), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm6
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm6, %xmm0
        vpshufd	$0x4e, %xmm6, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        addl	$16, %ecx
        cmpl	%esi, %ecx
        jl	L_AES_GCM_aad_update_avx2_16_loop
        vmovdqu	%xmm4, (%rdx)
        vzeroupper
        repz retq
#ifndef __APPLE__
.size	AES_GCM_aad_update_avx2,.-AES_GCM_aad_update_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_block_avx2
.type	AES_GCM_encrypt_block_avx2,@function
.align	16
AES_GCM_encrypt_block_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_block_avx2
.p2align	4
_AES_GCM_encrypt_block_avx2:
#endif /* __APPLE__ */
        movq	%rdx, %r10
        movq	%rcx, %r11
        subq	$0x98, %rsp
        vmovdqu	(%r8), %xmm3
        # aesenc_block
        vmovdqu	%xmm3, %xmm1
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
        vpxor	(%rdi), %xmm0, %xmm0
        vmovdqu	16(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	32(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	48(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	64(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	80(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	96(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	112(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	128(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	144(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	%xmm1, %xmm3
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	176(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_block_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	208(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	224(%rdi), %xmm1
L_AES_GCM_encrypt_block_avx2_aesenc_block_last:
        vaesenclast	%xmm1, %xmm0, %xmm0
        vmovdqu	(%r11), %xmm1
        vpxor	%xmm1, %xmm0, %xmm0
        vmovdqu	%xmm0, (%r10)
        vmovdqu	%xmm3, (%r8)
        vzeroupper
        addq	$0x98, %rsp
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_block_avx2,.-AES_GCM_encrypt_block_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_ghash_block_avx2
.type	AES_GCM_ghash_block_avx2,@function
.align	16
AES_GCM_ghash_block_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_ghash_block_avx2
.p2align	4
_AES_GCM_ghash_block_avx2:
#endif /* __APPLE__ */
        vmovdqu	(%rsi), %xmm4
        vmovdqu	(%rdx), %xmm5
        vmovdqu	(%rdi), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm4, %xmm4
        # ghash_gfmul_avx
        vpclmulqdq	$16, %xmm4, %xmm5, %xmm2
        vpclmulqdq	$0x01, %xmm4, %xmm5, %xmm1
        vpclmulqdq	$0x00, %xmm4, %xmm5, %xmm0
        vpclmulqdq	$0x11, %xmm4, %xmm5, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpslldq	$8, %xmm2, %xmm1
        vpsrldq	$8, %xmm2, %xmm2
        vpxor	%xmm1, %xmm0, %xmm6
        vpxor	%xmm2, %xmm3, %xmm4
        # ghash_mid
        vpsrld	$31, %xmm6, %xmm0
        vpsrld	$31, %xmm4, %xmm1
        vpslld	$0x01, %xmm6, %xmm6
        vpslld	$0x01, %xmm4, %xmm4
        vpsrldq	$12, %xmm0, %xmm2
        vpslldq	$4, %xmm0, %xmm0
        vpslldq	$4, %xmm1, %xmm1
        vpor	%xmm2, %xmm4, %xmm4
        vpor	%xmm0, %xmm6, %xmm6
        vpor	%xmm1, %xmm4, %xmm4
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm6, %xmm0
        vpshufd	$0x4e, %xmm6, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm4, %xmm4
        vmovdqu	%xmm4, (%rsi)
        vzeroupper
        repz retq
#ifndef __APPLE__
.size	AES_GCM_ghash_block_avx2,.-AES_GCM_ghash_block_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_update_avx2
.type	AES_GCM_encrypt_update_avx2,@function
.align	16
AES_GCM_encrypt_update_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_update_avx2
.p2align	4
_AES_GCM_encrypt_update_avx2:
#endif /* __APPLE__ */
        pushq	%r12
        pushq	%r13
        pushq	%r14
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	32(%rsp), %rax
        movq	40(%rsp), %r12
        subq	$0x98, %rsp
        vmovdqu	(%r9), %xmm6
        vmovdqu	(%rax), %xmm5
        vmovdqu	(%r12), %xmm4
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        xorl	%r14d, %r14d
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_encrypt_update_avx2_done_128
        andl	$0xffffff80, %r13d
        vmovdqu	%xmm4, 128(%rsp)
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm3
        # H ^ 1 and H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm9, %xmm10, %xmm0
        vmovdqu	%xmm5, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3 and H ^ 4
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm12
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm13
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm2
        vpxor	%xmm9, %xmm10, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        vmovdqu	%xmm2, 48(%rsp)
        # H ^ 5 and H ^ 6
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm10
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm9
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm12
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm13
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        vmovdqu	%xmm0, 80(%rsp)
        # H ^ 7 and H ^ 8
        vpclmulqdq	$16, %xmm1, %xmm2, %xmm11
        vpclmulqdq	$0x01, %xmm1, %xmm2, %xmm10
        vpclmulqdq	$0x00, %xmm1, %xmm2, %xmm9
        vpclmulqdq	$0x11, %xmm1, %xmm2, %xmm12
        vpclmulqdq	$0x00, %xmm2, %xmm2, %xmm13
        vpclmulqdq	$0x11, %xmm2, %xmm2, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        vmovdqu	%xmm0, 112(%rsp)
        # First 128 bytes of input
        # aesenc_128
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rdi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        vmovdqu	16(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	32(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	48(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	80(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	96(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	112(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	128(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	144(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_avx2_aesenc_128_enc_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%r11), %xmm0
        vmovdqu	16(%r11), %xmm1
        vmovdqu	32(%r11), %xmm2
        vmovdqu	48(%r11), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%r10)
        vmovdqu	%xmm9, 16(%r10)
        vmovdqu	%xmm10, 32(%r10)
        vmovdqu	%xmm11, 48(%r10)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%r11), %xmm0
        vmovdqu	80(%r11), %xmm1
        vmovdqu	96(%r11), %xmm2
        vmovdqu	112(%r11), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%r10)
        vmovdqu	%xmm13, 80(%r10)
        vmovdqu	%xmm14, 96(%r10)
        vmovdqu	%xmm15, 112(%r10)
        cmpl	$0x80, %r13d
        movl	$0x80, %r14d
        jle	L_AES_GCM_encrypt_update_avx2_end_128
        # More 128 bytes of input
L_AES_GCM_encrypt_update_avx2_ghash_128:
        # aesenc_128_ghash
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rdi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        # aesenc_pclmul_1
        vmovdqu	-128(%rdx), %xmm1
        vmovdqu	16(%rdi), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vmovdqu	112(%rsp), %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm5
        vpclmulqdq	$0x01, %xmm2, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm6
        vpclmulqdq	$0x11, %xmm2, %xmm1, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_2
        vmovdqu	-112(%rdx), %xmm1
        vmovdqu	96(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	32(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-96(%rdx), %xmm1
        vmovdqu	80(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	48(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-80(%rdx), %xmm1
        vmovdqu	64(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	64(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-64(%rdx), %xmm1
        vmovdqu	48(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	80(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-48(%rdx), %xmm1
        vmovdqu	32(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	96(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-32(%rdx), %xmm1
        vmovdqu	16(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	112(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	-16(%rdx), %xmm1
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	128(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_l
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm4, %xmm6, %xmm6
        vpxor	%xmm3, %xmm5, %xmm5
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vmovdqu	144(%rdi), %xmm4
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm0
        vaesenc	%xmm4, %xmm8, %xmm8
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm5, %xmm7, %xmm7
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm9, %xmm9
        vaesenc	%xmm4, %xmm10, %xmm10
        vaesenc	%xmm4, %xmm11, %xmm11
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm12, %xmm12
        vaesenc	%xmm4, %xmm13, %xmm13
        vaesenc	%xmm4, %xmm14, %xmm14
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm7, %xmm6, %xmm6
        vaesenc	%xmm4, %xmm15, %xmm15
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm7
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rdi), %xmm7
L_AES_GCM_encrypt_update_avx2_aesenc_128_ghash_avx_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	32(%rcx), %xmm2
        vmovdqu	48(%rcx), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	96(%rcx), %xmm2
        vmovdqu	112(%rcx), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        # aesenc_128_ghash - end
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_avx2_ghash_128
L_AES_GCM_encrypt_update_avx2_end_128:
        vmovdqu	L_avx2_aes_gcm_bswap_mask(%rip), %xmm4
        vpshufb	%xmm4, %xmm8, %xmm8
        vpshufb	%xmm4, %xmm9, %xmm9
        vpshufb	%xmm4, %xmm10, %xmm10
        vpshufb	%xmm4, %xmm11, %xmm11
        vpshufb	%xmm4, %xmm12, %xmm12
        vpshufb	%xmm4, %xmm13, %xmm13
        vpshufb	%xmm4, %xmm14, %xmm14
        vpshufb	%xmm4, %xmm15, %xmm15
        vpxor	%xmm6, %xmm8, %xmm8
        vmovdqu	(%rsp), %xmm7
        vpclmulqdq	$16, %xmm15, %xmm7, %xmm5
        vpclmulqdq	$0x01, %xmm15, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm15, %xmm7, %xmm4
        vpclmulqdq	$0x11, %xmm15, %xmm7, %xmm6
        vpxor	%xmm1, %xmm5, %xmm5
        vmovdqu	16(%rsp), %xmm7
        vpclmulqdq	$16, %xmm14, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm14, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm14, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm14, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	32(%rsp), %xmm15
        vmovdqu	48(%rsp), %xmm7
        vpclmulqdq	$16, %xmm13, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm13, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm13, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm13, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm12, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm12, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm12, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm12, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	64(%rsp), %xmm15
        vmovdqu	80(%rsp), %xmm7
        vpclmulqdq	$16, %xmm11, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm11, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm11, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm11, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm10, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm10, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm10, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm10, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vmovdqu	96(%rsp), %xmm15
        vmovdqu	112(%rsp), %xmm7
        vpclmulqdq	$16, %xmm9, %xmm15, %xmm2
        vpclmulqdq	$0x01, %xmm9, %xmm15, %xmm1
        vpclmulqdq	$0x00, %xmm9, %xmm15, %xmm0
        vpclmulqdq	$0x11, %xmm9, %xmm15, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpclmulqdq	$16, %xmm8, %xmm7, %xmm2
        vpclmulqdq	$0x01, %xmm8, %xmm7, %xmm1
        vpclmulqdq	$0x00, %xmm8, %xmm7, %xmm0
        vpclmulqdq	$0x11, %xmm8, %xmm7, %xmm3
        vpxor	%xmm1, %xmm2, %xmm2
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm0, %xmm4, %xmm4
        vpslldq	$8, %xmm5, %xmm7
        vpsrldq	$8, %xmm5, %xmm5
        vpxor	%xmm7, %xmm4, %xmm4
        vpxor	%xmm5, %xmm6, %xmm6
        # ghash_red
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm2
        vpclmulqdq	$16, %xmm2, %xmm4, %xmm0
        vpshufd	$0x4e, %xmm4, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm0
        vpshufd	$0x4e, %xmm1, %xmm1
        vpxor	%xmm0, %xmm1, %xmm1
        vpxor	%xmm1, %xmm6, %xmm6
        vmovdqu	(%rsp), %xmm5
        vmovdqu	128(%rsp), %xmm4
L_AES_GCM_encrypt_update_avx2_done_128:
        cmpl	%r8d, %r14d
        je	L_AES_GCM_encrypt_update_avx2_done_enc
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_avx2_last_block_done
        # aesenc_block
        vmovdqu	%xmm4, %xmm1
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1, %xmm0
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm1, %xmm1
        vpxor	(%rdi), %xmm0, %xmm0
        vmovdqu	16(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	32(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	48(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	64(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	80(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	96(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	112(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	128(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	144(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	%xmm1, %xmm4
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	176(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm1
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_block_last
        vaesenc	%xmm1, %xmm0, %xmm0
        vmovdqu	208(%rdi), %xmm2
        vaesenc	%xmm2, %xmm0, %xmm0
        vmovdqu	224(%rdi), %xmm1
L_AES_GCM_encrypt_update_avx2_aesenc_block_last:
        vaesenclast	%xmm1, %xmm0, %xmm0
        vmovdqu	(%r11,%r14,1), %xmm1
        vpxor	%xmm1, %xmm0, %xmm0
        vmovdqu	%xmm0, (%r10,%r14,1)
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm0, %xmm6, %xmm6
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_encrypt_update_avx2_last_block_ghash
L_AES_GCM_encrypt_update_avx2_last_block_start:
        vmovdqu	(%r11,%r14,1), %xmm12
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm11
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        # aesenc_gfmul_sb
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm2
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm8
        vpxor	(%rdi), %xmm11, %xmm11
        vaesenc	16(%rdi), %xmm11, %xmm11
        vpxor	%xmm2, %xmm3, %xmm3
        vpslldq	$8, %xmm3, %xmm2
        vpsrldq	$8, %xmm3, %xmm3
        vaesenc	32(%rdi), %xmm11, %xmm11
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	48(%rdi), %xmm11, %xmm11
        vaesenc	64(%rdi), %xmm11, %xmm11
        vaesenc	80(%rdi), %xmm11, %xmm11
        vpshufd	$0x4e, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	96(%rdi), %xmm11, %xmm11
        vaesenc	112(%rdi), %xmm11, %xmm11
        vaesenc	128(%rdi), %xmm11, %xmm11
        vpshufd	$0x4e, %xmm2, %xmm2
        vaesenc	144(%rdi), %xmm11, %xmm11
        vpxor	%xmm3, %xmm8, %xmm8
        vpxor	%xmm8, %xmm2, %xmm2
        vmovdqu	160(%rdi), %xmm0
        cmpl	$11, %esi
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	176(%rdi), %xmm11, %xmm11
        vmovdqu	192(%rdi), %xmm0
        cmpl	$13, %esi
        jl	L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	208(%rdi), %xmm11, %xmm11
        vmovdqu	224(%rdi), %xmm0
L_AES_GCM_encrypt_update_avx2_aesenc_gfmul_sb_last:
        vaesenclast	%xmm0, %xmm11, %xmm11
        vpxor	%xmm1, %xmm2, %xmm6
        vpxor	%xmm12, %xmm11, %xmm11
        vmovdqu	%xmm11, (%r10,%r14,1)
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm11
        vpxor	%xmm11, %xmm6, %xmm6
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_encrypt_update_avx2_last_block_start
L_AES_GCM_encrypt_update_avx2_last_block_ghash:
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm6, %xmm10
        vpclmulqdq	$0x01, %xmm5, %xmm6, %xmm9
        vpclmulqdq	$0x00, %xmm5, %xmm6, %xmm8
        vpxor	%xmm9, %xmm10, %xmm10
        vpslldq	$8, %xmm10, %xmm9
        vpsrldq	$8, %xmm10, %xmm10
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm6, %xmm6
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm10, %xmm6, %xmm6
        vpxor	%xmm9, %xmm6, %xmm6
        vpxor	%xmm8, %xmm6, %xmm6
L_AES_GCM_encrypt_update_avx2_last_block_done:
L_AES_GCM_encrypt_update_avx2_done_enc:
        vmovdqu	%xmm6, (%r9)
        vmovdqu	%xmm4, (%r12)
        vzeroupper
        addq	$0x98, %rsp
        popq	%r14
        popq	%r13
        popq	%r12
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_update_avx2,.-AES_GCM_encrypt_update_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_encrypt_final_avx2
.type	AES_GCM_encrypt_final_avx2,@function
.align	16
AES_GCM_encrypt_final_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_encrypt_final_avx2
.p2align	4
_AES_GCM_encrypt_final_avx2:
#endif /* __APPLE__ */
        movq	8(%rsp), %rax
        subq	$16, %rsp
        vmovdqu	(%rdi), %xmm4
        vmovdqu	(%r9), %xmm5
        vmovdqu	(%rax), %xmm6
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        # calc_tag
        shlq	$3, %rcx
        shlq	$3, %r8
        vmovq	%rcx, %xmm0
        vmovq	%r8, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm4, %xmm0, %xmm0
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm7
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm2
        vpxor	%xmm3, %xmm7, %xmm7
        vpslldq	$8, %xmm7, %xmm3
        vpsrldq	$8, %xmm7, %xmm7
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm0
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm7, %xmm0, %xmm0
        vpxor	%xmm3, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        # store_tag
        cmpl	$16, %edx
        je	L_AES_GCM_encrypt_final_avx2_store_tag_16
        xorq	%r10, %r10
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_encrypt_final_avx2_store_tag_loop:
        movzbl	(%rsp,%r10,1), %r11d
        movb	%r11b, (%rsi,%r10,1)
        incl	%r10d
        cmpl	%edx, %r10d
        jne	L_AES_GCM_encrypt_final_avx2_store_tag_loop
        jmp	L_AES_GCM_encrypt_final_avx2_store_tag_done
L_AES_GCM_encrypt_final_avx2_store_tag_16:
        vmovdqu	%xmm0, (%rsi)
L_AES_GCM_encrypt_final_avx2_store_tag_done:
        vzeroupper
        addq	$16, %rsp
        repz retq
#ifndef __APPLE__
.size	AES_GCM_encrypt_final_avx2,.-AES_GCM_encrypt_final_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_update_avx2
.type	AES_GCM_decrypt_update_avx2,@function
.align	16
AES_GCM_decrypt_update_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_update_avx2
.p2align	4
_AES_GCM_decrypt_update_avx2:
#endif /* __APPLE__ */
        pushq	%r13
        pushq	%r12
        pushq	%r14
        movq	%rdx, %r10
        movq	%rcx, %r11
        movq	32(%rsp), %rax
        movq	40(%rsp), %r12
        subq	$0xa8, %rsp
        vmovdqu	(%r9), %xmm6
        vmovdqu	(%rax), %xmm5
        vmovdqu	(%r12), %xmm4
        # Calculate H
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        xorl	%r14d, %r14d
        cmpl	$0x80, %r8d
        movl	%r8d, %r13d
        jl	L_AES_GCM_decrypt_update_avx2_done_128
        andl	$0xffffff80, %r13d
        vmovdqu	%xmm4, 128(%rsp)
        vmovdqu	%xmm15, 144(%rsp)
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm3
        # H ^ 1 and H ^ 2
        vpclmulqdq	$0x00, %xmm5, %xmm5, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm5, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm9, %xmm8
        vpshufd	$0x4e, %xmm9, %xmm9
        vpxor	%xmm8, %xmm9, %xmm9
        vpxor	%xmm9, %xmm10, %xmm0
        vmovdqu	%xmm5, (%rsp)
        vmovdqu	%xmm0, 16(%rsp)
        # H ^ 3 and H ^ 4
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm11
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm10
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm9
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm12
        vpclmulqdq	$0x00, %xmm0, %xmm0, %xmm13
        vpclmulqdq	$0x11, %xmm0, %xmm0, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm2
        vpxor	%xmm9, %xmm10, %xmm1
        vmovdqu	%xmm1, 32(%rsp)
        vmovdqu	%xmm2, 48(%rsp)
        # H ^ 5 and H ^ 6
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm11
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm10
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm9
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm12
        vpclmulqdq	$0x00, %xmm1, %xmm1, %xmm13
        vpclmulqdq	$0x11, %xmm1, %xmm1, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 64(%rsp)
        vmovdqu	%xmm0, 80(%rsp)
        # H ^ 7 and H ^ 8
        vpclmulqdq	$16, %xmm1, %xmm2, %xmm11
        vpclmulqdq	$0x01, %xmm1, %xmm2, %xmm10
        vpclmulqdq	$0x00, %xmm1, %xmm2, %xmm9
        vpclmulqdq	$0x11, %xmm1, %xmm2, %xmm12
        vpclmulqdq	$0x00, %xmm2, %xmm2, %xmm13
        vpclmulqdq	$0x11, %xmm2, %xmm2, %xmm14
        vpxor	%xmm10, %xmm11, %xmm11
        vpslldq	$8, %xmm11, %xmm10
        vpsrldq	$8, %xmm11, %xmm11
        vpxor	%xmm9, %xmm10, %xmm10
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm9, %xmm10, %xmm10
        vpxor	%xmm8, %xmm13, %xmm13
        vpclmulqdq	$16, %xmm3, %xmm10, %xmm9
        vpclmulqdq	$16, %xmm3, %xmm13, %xmm8
        vpshufd	$0x4e, %xmm10, %xmm10
        vpshufd	$0x4e, %xmm13, %xmm13
        vpxor	%xmm11, %xmm12, %xmm12
        vpxor	%xmm8, %xmm13, %xmm13
        vpxor	%xmm12, %xmm10, %xmm10
        vpxor	%xmm14, %xmm13, %xmm0
        vpxor	%xmm9, %xmm10, %xmm7
        vmovdqu	%xmm7, 96(%rsp)
        vmovdqu	%xmm0, 112(%rsp)
L_AES_GCM_decrypt_update_avx2_ghash_128:
        # aesenc_128_ghash
        leaq	(%r11,%r14,1), %rcx
        leaq	(%r10,%r14,1), %rdx
        # aesenc_ctr
        vmovdqu	128(%rsp), %xmm0
        vmovdqu	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm1
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm0, %xmm9
        vpshufb	%xmm1, %xmm0, %xmm8
        vpaddd	L_avx2_aes_gcm_two(%rip), %xmm0, %xmm10
        vpshufb	%xmm1, %xmm9, %xmm9
        vpaddd	L_avx2_aes_gcm_three(%rip), %xmm0, %xmm11
        vpshufb	%xmm1, %xmm10, %xmm10
        vpaddd	L_avx2_aes_gcm_four(%rip), %xmm0, %xmm12
        vpshufb	%xmm1, %xmm11, %xmm11
        vpaddd	L_avx2_aes_gcm_five(%rip), %xmm0, %xmm13
        vpshufb	%xmm1, %xmm12, %xmm12
        vpaddd	L_avx2_aes_gcm_six(%rip), %xmm0, %xmm14
        vpshufb	%xmm1, %xmm13, %xmm13
        vpaddd	L_avx2_aes_gcm_seven(%rip), %xmm0, %xmm15
        vpshufb	%xmm1, %xmm14, %xmm14
        vpaddd	L_avx2_aes_gcm_eight(%rip), %xmm0, %xmm0
        vpshufb	%xmm1, %xmm15, %xmm15
        # aesenc_xor
        vmovdqu	(%rdi), %xmm7
        vmovdqu	%xmm0, 128(%rsp)
        vpxor	%xmm7, %xmm8, %xmm8
        vpxor	%xmm7, %xmm9, %xmm9
        vpxor	%xmm7, %xmm10, %xmm10
        vpxor	%xmm7, %xmm11, %xmm11
        vpxor	%xmm7, %xmm12, %xmm12
        vpxor	%xmm7, %xmm13, %xmm13
        vpxor	%xmm7, %xmm14, %xmm14
        vpxor	%xmm7, %xmm15, %xmm15
        # aesenc_pclmul_1
        vmovdqu	(%rcx), %xmm1
        vmovdqu	16(%rdi), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vmovdqu	112(%rsp), %xmm2
        vpxor	%xmm6, %xmm1, %xmm1
        vpclmulqdq	$16, %xmm2, %xmm1, %xmm5
        vpclmulqdq	$0x01, %xmm2, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm2, %xmm1, %xmm6
        vpclmulqdq	$0x11, %xmm2, %xmm1, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_2
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	96(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	32(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	32(%rcx), %xmm1
        vmovdqu	80(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	48(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	48(%rcx), %xmm1
        vmovdqu	64(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	64(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	64(%rcx), %xmm1
        vmovdqu	48(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	80(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	32(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	96(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	96(%rcx), %xmm1
        vmovdqu	16(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	112(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_n
        vmovdqu	112(%rcx), %xmm1
        vmovdqu	(%rsp), %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm1, %xmm1
        vpxor	%xmm2, %xmm5, %xmm5
        vpclmulqdq	$16, %xmm0, %xmm1, %xmm2
        vpxor	%xmm3, %xmm5, %xmm5
        vpclmulqdq	$0x01, %xmm0, %xmm1, %xmm3
        vpxor	%xmm4, %xmm6, %xmm6
        vpclmulqdq	$0x00, %xmm0, %xmm1, %xmm4
        vpclmulqdq	$0x11, %xmm0, %xmm1, %xmm1
        vmovdqu	128(%rdi), %xmm0
        vpxor	%xmm1, %xmm7, %xmm7
        vaesenc	%xmm0, %xmm8, %xmm8
        vaesenc	%xmm0, %xmm9, %xmm9
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	%xmm0, %xmm11, %xmm11
        vaesenc	%xmm0, %xmm12, %xmm12
        vaesenc	%xmm0, %xmm13, %xmm13
        vaesenc	%xmm0, %xmm14, %xmm14
        vaesenc	%xmm0, %xmm15, %xmm15
        # aesenc_pclmul_l
        vpxor	%xmm2, %xmm5, %xmm5
        vpxor	%xmm4, %xmm6, %xmm6
        vpxor	%xmm3, %xmm5, %xmm5
        vpslldq	$8, %xmm5, %xmm1
        vpsrldq	$8, %xmm5, %xmm5
        vmovdqu	144(%rdi), %xmm4
        vmovdqu	L_avx2_aes_gcm_mod2_128(%rip), %xmm0
        vaesenc	%xmm4, %xmm8, %xmm8
        vpxor	%xmm1, %xmm6, %xmm6
        vpxor	%xmm5, %xmm7, %xmm7
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm9, %xmm9
        vaesenc	%xmm4, %xmm10, %xmm10
        vaesenc	%xmm4, %xmm11, %xmm11
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpclmulqdq	$16, %xmm0, %xmm6, %xmm3
        vaesenc	%xmm4, %xmm12, %xmm12
        vaesenc	%xmm4, %xmm13, %xmm13
        vaesenc	%xmm4, %xmm14, %xmm14
        vpshufd	$0x4e, %xmm6, %xmm6
        vpxor	%xmm3, %xmm6, %xmm6
        vpxor	%xmm7, %xmm6, %xmm6
        vaesenc	%xmm4, %xmm15, %xmm15
        cmpl	$11, %esi
        vmovdqu	160(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	176(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        cmpl	$13, %esi
        vmovdqu	192(%rdi), %xmm7
        jl	L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	208(%rdi), %xmm7
        vaesenc	%xmm7, %xmm8, %xmm8
        vaesenc	%xmm7, %xmm9, %xmm9
        vaesenc	%xmm7, %xmm10, %xmm10
        vaesenc	%xmm7, %xmm11, %xmm11
        vaesenc	%xmm7, %xmm12, %xmm12
        vaesenc	%xmm7, %xmm13, %xmm13
        vaesenc	%xmm7, %xmm14, %xmm14
        vaesenc	%xmm7, %xmm15, %xmm15
        vmovdqu	224(%rdi), %xmm7
L_AES_GCM_decrypt_update_avx2_aesenc_128_ghash_avx_done:
        # aesenc_last
        vaesenclast	%xmm7, %xmm8, %xmm8
        vaesenclast	%xmm7, %xmm9, %xmm9
        vaesenclast	%xmm7, %xmm10, %xmm10
        vaesenclast	%xmm7, %xmm11, %xmm11
        vmovdqu	(%rcx), %xmm0
        vmovdqu	16(%rcx), %xmm1
        vmovdqu	32(%rcx), %xmm2
        vmovdqu	48(%rcx), %xmm3
        vpxor	%xmm0, %xmm8, %xmm8
        vpxor	%xmm1, %xmm9, %xmm9
        vpxor	%xmm2, %xmm10, %xmm10
        vpxor	%xmm3, %xmm11, %xmm11
        vmovdqu	%xmm8, (%rdx)
        vmovdqu	%xmm9, 16(%rdx)
        vmovdqu	%xmm10, 32(%rdx)
        vmovdqu	%xmm11, 48(%rdx)
        vaesenclast	%xmm7, %xmm12, %xmm12
        vaesenclast	%xmm7, %xmm13, %xmm13
        vaesenclast	%xmm7, %xmm14, %xmm14
        vaesenclast	%xmm7, %xmm15, %xmm15
        vmovdqu	64(%rcx), %xmm0
        vmovdqu	80(%rcx), %xmm1
        vmovdqu	96(%rcx), %xmm2
        vmovdqu	112(%rcx), %xmm3
        vpxor	%xmm0, %xmm12, %xmm12
        vpxor	%xmm1, %xmm13, %xmm13
        vpxor	%xmm2, %xmm14, %xmm14
        vpxor	%xmm3, %xmm15, %xmm15
        vmovdqu	%xmm12, 64(%rdx)
        vmovdqu	%xmm13, 80(%rdx)
        vmovdqu	%xmm14, 96(%rdx)
        vmovdqu	%xmm15, 112(%rdx)
        # aesenc_128_ghash - end
        addl	$0x80, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_avx2_ghash_128
        vmovdqu	(%rsp), %xmm5
        vmovdqu	128(%rsp), %xmm4
        vmovdqu	144(%rsp), %xmm15
L_AES_GCM_decrypt_update_avx2_done_128:
        cmpl	%r8d, %r14d
        jge	L_AES_GCM_decrypt_update_avx2_done_dec
        movl	%r8d, %r13d
        andl	$0xfffffff0, %r13d
        cmpl	%r13d, %r14d
        jge	L_AES_GCM_decrypt_update_avx2_last_block_done
L_AES_GCM_decrypt_update_avx2_last_block_start:
        vmovdqu	(%r11,%r14,1), %xmm11
        vpshufb	L_avx2_aes_gcm_bswap_epi64(%rip), %xmm4, %xmm10
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm11, %xmm12
        vpaddd	L_avx2_aes_gcm_one(%rip), %xmm4, %xmm4
        vpxor	%xmm6, %xmm12, %xmm12
        # aesenc_gfmul_sb
        vpclmulqdq	$0x01, %xmm5, %xmm12, %xmm2
        vpclmulqdq	$16, %xmm5, %xmm12, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm12, %xmm1
        vpclmulqdq	$0x11, %xmm5, %xmm12, %xmm8
        vpxor	(%rdi), %xmm10, %xmm10
        vaesenc	16(%rdi), %xmm10, %xmm10
        vpxor	%xmm2, %xmm3, %xmm3
        vpslldq	$8, %xmm3, %xmm2
        vpsrldq	$8, %xmm3, %xmm3
        vaesenc	32(%rdi), %xmm10, %xmm10
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	48(%rdi), %xmm10, %xmm10
        vaesenc	64(%rdi), %xmm10, %xmm10
        vaesenc	80(%rdi), %xmm10, %xmm10
        vpshufd	$0x4e, %xmm2, %xmm2
        vpxor	%xmm1, %xmm2, %xmm2
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm2, %xmm1
        vaesenc	96(%rdi), %xmm10, %xmm10
        vaesenc	112(%rdi), %xmm10, %xmm10
        vaesenc	128(%rdi), %xmm10, %xmm10
        vpshufd	$0x4e, %xmm2, %xmm2
        vaesenc	144(%rdi), %xmm10, %xmm10
        vpxor	%xmm3, %xmm8, %xmm8
        vpxor	%xmm8, %xmm2, %xmm2
        vmovdqu	160(%rdi), %xmm0
        cmpl	$11, %esi
        jl	L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	176(%rdi), %xmm10, %xmm10
        vmovdqu	192(%rdi), %xmm0
        cmpl	$13, %esi
        jl	L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last
        vaesenc	%xmm0, %xmm10, %xmm10
        vaesenc	208(%rdi), %xmm10, %xmm10
        vmovdqu	224(%rdi), %xmm0
L_AES_GCM_decrypt_update_avx2_aesenc_gfmul_sb_last:
        vaesenclast	%xmm0, %xmm10, %xmm10
        vpxor	%xmm1, %xmm2, %xmm6
        vpxor	%xmm11, %xmm10, %xmm10
        vmovdqu	%xmm10, (%r10,%r14,1)
        addl	$16, %r14d
        cmpl	%r13d, %r14d
        jl	L_AES_GCM_decrypt_update_avx2_last_block_start
L_AES_GCM_decrypt_update_avx2_last_block_done:
L_AES_GCM_decrypt_update_avx2_done_dec:
        vmovdqu	%xmm6, (%r9)
        vmovdqu	%xmm4, (%r12)
        vzeroupper
        addq	$0xa8, %rsp
        popq	%r14
        popq	%r12
        popq	%r13
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_update_avx2,.-AES_GCM_decrypt_update_avx2
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl	AES_GCM_decrypt_final_avx2
.type	AES_GCM_decrypt_final_avx2,@function
.align	16
AES_GCM_decrypt_final_avx2:
#else
.section	__TEXT,__text
.globl	_AES_GCM_decrypt_final_avx2
.p2align	4
_AES_GCM_decrypt_final_avx2:
#endif /* __APPLE__ */
        pushq	%r12
        movq	16(%rsp), %rax
        movq	24(%rsp), %r10
        subq	$16, %rsp
        vmovdqu	(%rdi), %xmm4
        vmovdqu	(%r9), %xmm5
        vmovdqu	(%rax), %xmm6
        vpsrlq	$63, %xmm5, %xmm1
        vpsllq	$0x01, %xmm5, %xmm0
        vpslldq	$8, %xmm1, %xmm1
        vpor	%xmm1, %xmm0, %xmm0
        vpshufd	$0xff, %xmm5, %xmm5
        vpsrad	$31, %xmm5, %xmm5
        vpand	L_avx2_aes_gcm_mod2_128(%rip), %xmm5, %xmm5
        vpxor	%xmm0, %xmm5, %xmm5
        # calc_tag
        shlq	$3, %rcx
        shlq	$3, %r8
        vmovq	%rcx, %xmm0
        vmovq	%r8, %xmm1
        vpunpcklqdq	%xmm1, %xmm0, %xmm0
        vpxor	%xmm4, %xmm0, %xmm0
        # ghash_gfmul_red
        vpclmulqdq	$16, %xmm5, %xmm0, %xmm7
        vpclmulqdq	$0x01, %xmm5, %xmm0, %xmm3
        vpclmulqdq	$0x00, %xmm5, %xmm0, %xmm2
        vpxor	%xmm3, %xmm7, %xmm7
        vpslldq	$8, %xmm7, %xmm3
        vpsrldq	$8, %xmm7, %xmm7
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$0x11, %xmm5, %xmm0, %xmm0
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm2, %xmm3, %xmm3
        vpclmulqdq	$16, L_avx2_aes_gcm_mod2_128(%rip), %xmm3, %xmm2
        vpshufd	$0x4e, %xmm3, %xmm3
        vpxor	%xmm7, %xmm0, %xmm0
        vpxor	%xmm3, %xmm0, %xmm0
        vpxor	%xmm2, %xmm0, %xmm0
        vpshufb	L_avx2_aes_gcm_bswap_mask(%rip), %xmm0, %xmm0
        vpxor	%xmm6, %xmm0, %xmm0
        # cmp_tag
        cmpl	$16, %edx
        je	L_AES_GCM_decrypt_final_avx2_cmp_tag_16
        xorq	%r11, %r11
        xorq	%r9, %r9
        vmovdqu	%xmm0, (%rsp)
L_AES_GCM_decrypt_final_avx2_cmp_tag_loop:
        movzbl	(%rsp,%r11,1), %r12d
        xorb	(%rsi,%r11,1), %r12b
        orb	%r12b, %r9b
        incl	%r11d
        cmpl	%edx, %r11d
        jne	L_AES_GCM_decrypt_final_avx2_cmp_tag_loop
        cmpb	$0x00, %r9b
        sete	%r9b
        jmp	L_AES_GCM_decrypt_final_avx2_cmp_tag_done
L_AES_GCM_decrypt_final_avx2_cmp_tag_16:
        vmovdqu	(%rsi), %xmm1
        vpcmpeqb	%xmm1, %xmm0, %xmm0
        vpmovmskb	%xmm0, %r11
        # %%edx == 0xFFFF then return 1 else => return 0
        xorl	%r9d, %r9d
        cmpl	$0xffff, %r11d
        sete	%r9b
L_AES_GCM_decrypt_final_avx2_cmp_tag_done:
        movl	%r9d, (%r10)
        vzeroupper
        addq	$16, %rsp
        popq	%r12
        repz retq
#ifndef __APPLE__
.size	AES_GCM_decrypt_final_avx2,.-AES_GCM_decrypt_final_avx2
#endif /* __APPLE__ */
#endif /* WOLFSSL_AESGCM_STREAM */
#endif /* HAVE_INTEL_AVX2 */
#endif /* WOLFSSL_X86_64_BUILD */

#if defined(__linux__) && defined(__ELF__)
.section	.note.GNU-stack,"",%progbits
#endif
