.text
.global aes128_key_expansion
aes128_key_expansion:
  movdqu 0(%rcx), %xmm1
  movdqu %xmm1, 0(%rdx)
  aeskeygenassist $1, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 16(%rdx)
  aeskeygenassist $2, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 32(%rdx)
  aeskeygenassist $4, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 48(%rdx)
  aeskeygenassist $8, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 64(%rdx)
  aeskeygenassist $16, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 80(%rdx)
  aeskeygenassist $32, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 96(%rdx)
  aeskeygenassist $64, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 112(%rdx)
  aeskeygenassist $128, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 128(%rdx)
  aeskeygenassist $27, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 144(%rdx)
  aeskeygenassist $54, %xmm1, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  vpslldq $4, %xmm1, %xmm3
  pxor %xmm3, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 160(%rdx)
  pxor %xmm1, %xmm1
  pxor %xmm2, %xmm2
  pxor %xmm3, %xmm3
  ret

.global aes128_keyhash_init
aes128_keyhash_init:
  mov $579005069656919567, %r8
  pinsrq $0, %r8, %xmm4
  mov $283686952306183, %r8
  pinsrq $1, %r8, %xmm4
  pxor %xmm0, %xmm0
  movdqu %xmm0, 80(%rdx)
  mov %rcx, %r8
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm4, %xmm0
  mov %rdx, %rcx
  movdqu %xmm0, 32(%rcx)
  movdqu %xmm6, %xmm0
  mov %r12, %rax
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 0(%rcx)
  movdqu %xmm6, %xmm1
  movdqu %xmm6, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 16(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 48(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 64(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 96(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 112(%rcx)
  movdqu %xmm0, %xmm6
  mov %rax, %r12
  ret

.global aes256_key_expansion
aes256_key_expansion:
  movdqu 0(%rcx), %xmm1
  movdqu 16(%rcx), %xmm3
  movdqu %xmm1, 0(%rdx)
  movdqu %xmm3, 16(%rdx)
  aeskeygenassist $1, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 32(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 48(%rdx)
  aeskeygenassist $2, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 64(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 80(%rdx)
  aeskeygenassist $4, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 96(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 112(%rdx)
  aeskeygenassist $8, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 128(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 144(%rdx)
  aeskeygenassist $16, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 160(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 176(%rdx)
  aeskeygenassist $32, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 192(%rdx)
  aeskeygenassist $0, %xmm1, %xmm2
  pshufd $170, %xmm2, %xmm2
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  vpslldq $4, %xmm3, %xmm4
  pxor %xmm4, %xmm3
  pxor %xmm2, %xmm3
  movdqu %xmm3, 208(%rdx)
  aeskeygenassist $64, %xmm3, %xmm2
  pshufd $255, %xmm2, %xmm2
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  vpslldq $4, %xmm1, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm2, %xmm1
  movdqu %xmm1, 224(%rdx)
  pxor %xmm1, %xmm1
  pxor %xmm2, %xmm2
  pxor %xmm3, %xmm3
  pxor %xmm4, %xmm4
  ret

.global aes256_keyhash_init
aes256_keyhash_init:
  mov $579005069656919567, %r8
  pinsrq $0, %r8, %xmm4
  mov $283686952306183, %r8
  pinsrq $1, %r8, %xmm4
  pxor %xmm0, %xmm0
  movdqu %xmm0, 80(%rdx)
  mov %rcx, %r8
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm4, %xmm0
  mov %rdx, %rcx
  movdqu %xmm0, 32(%rcx)
  movdqu %xmm6, %xmm0
  mov %r12, %rax
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 0(%rcx)
  movdqu %xmm6, %xmm1
  movdqu %xmm6, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 16(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 48(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 64(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 96(%rcx)
  movdqu %xmm6, %xmm2
  movdqu 32(%rcx), %xmm1
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm6
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  movdqu %xmm1, %xmm5
  pclmulqdq $16, %xmm2, %xmm1
  movdqu %xmm1, %xmm3
  movdqu %xmm5, %xmm1
  pclmulqdq $1, %xmm2, %xmm1
  movdqu %xmm1, %xmm4
  movdqu %xmm5, %xmm1
  pclmulqdq $0, %xmm2, %xmm1
  pclmulqdq $17, %xmm2, %xmm5
  movdqu %xmm5, %xmm2
  movdqu %xmm1, %xmm5
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm4, %xmm1
  mov $0, %r12
  pinsrd $0, %r12d, %xmm1
  pshufd $14, %xmm1, %xmm1
  pxor %xmm1, %xmm2
  movdqu %xmm3, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm1
  pshufd $79, %xmm1, %xmm1
  mov $0, %r12
  pinsrd $3, %r12d, %xmm4
  pshufd $79, %xmm4, %xmm4
  pxor %xmm4, %xmm1
  pxor %xmm5, %xmm1
  movdqu %xmm1, %xmm3
  psrld $31, %xmm3
  movdqu %xmm2, %xmm4
  psrld $31, %xmm4
  pslld $1, %xmm1
  pslld $1, %xmm2
  vpslldq $4, %xmm3, %xmm5
  vpslldq $4, %xmm4, %xmm4
  mov $0, %r12
  pinsrd $0, %r12d, %xmm3
  pshufd $3, %xmm3, %xmm3
  pxor %xmm4, %xmm3
  pxor %xmm5, %xmm1
  pxor %xmm3, %xmm2
  movdqu %xmm2, %xmm5
  pxor %xmm2, %xmm2
  mov $3774873600, %r12
  pinsrd $3, %r12d, %xmm2
  pclmulqdq $17, %xmm2, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pxor %xmm5, %xmm1
  pxor %xmm6, %xmm1
  movdqu %xmm1, %xmm6
  movdqu %xmm1, %xmm3
  pxor %xmm4, %xmm4
  pxor %xmm5, %xmm5
  mov $3254779904, %r12
  pinsrd $3, %r12d, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  mov $2147483648, %r12
  pinsrd $3, %r12d, %xmm5
  movdqu %xmm3, %xmm1
  movdqu %xmm1, %xmm2
  psrld $31, %xmm2
  pslld $1, %xmm1
  vpslldq $4, %xmm2, %xmm2
  pxor %xmm2, %xmm1
  pand %xmm5, %xmm3
  pcmpeqd %xmm5, %xmm3
  pshufd $255, %xmm3, %xmm3
  pand %xmm4, %xmm3
  vpxor %xmm3, %xmm1, %xmm1
  movdqu %xmm1, 112(%rcx)
  movdqu %xmm0, %xmm6
  mov %rax, %r12
  ret

.global gctr128_bytes
gctr128_bytes:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov 272(%rsp), %rax
  movdqu 0(%rax), %xmm7
  mov %rcx, %rax
  mov %r8, %rbx
  mov %rdx, %rsi
  mov %r9, %r13
  mov 264(%rsp), %r8
  mov 280(%rsp), %rcx
  mov %rcx, %rbp
  imul $16, %rbp
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm8
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm8
  mov %rcx, %rdx
  shr $2, %rdx
  and $3, %rcx
  cmp $0, %rdx
  jbe L0
  mov %rax, %r9
  mov %rbx, %r10
  pshufb %xmm8, %xmm7
  movdqu %xmm7, %xmm9
  mov $579005069656919567, %rax
  pinsrq $0, %rax, %xmm0
  mov $579005069656919567, %rax
  pinsrq $1, %rax, %xmm0
  pshufb %xmm0, %xmm9
  movdqu %xmm9, %xmm10
  pxor %xmm3, %xmm3
  mov $1, %rax
  pinsrd $2, %eax, %xmm3
  paddd %xmm3, %xmm9
  mov $3, %rax
  pinsrd $2, %eax, %xmm3
  mov $2, %rax
  pinsrd $0, %eax, %xmm3
  paddd %xmm3, %xmm10
  pshufb %xmm8, %xmm9
  pshufb %xmm8, %xmm10
  pextrq $0, %xmm7, %rdi
  mov $283686952306183, %rax
  pinsrq $0, %rax, %xmm0
  mov $579005069656919567, %rax
  pinsrq $1, %rax, %xmm0
  pxor %xmm15, %xmm15
  mov $4, %rax
  pinsrd $0, %eax, %xmm15
  mov $4, %rax
  pinsrd $2, %eax, %xmm15
  jmp L3
.balign 16
L2:
  pinsrq $0, %rdi, %xmm2
  pinsrq $0, %rdi, %xmm12
  pinsrq $0, %rdi, %xmm13
  pinsrq $0, %rdi, %xmm14
  shufpd $2, %xmm9, %xmm2
  shufpd $0, %xmm9, %xmm12
  shufpd $2, %xmm10, %xmm13
  shufpd $0, %xmm10, %xmm14
  pshufb %xmm0, %xmm9
  pshufb %xmm0, %xmm10
  movdqu 0(%r8), %xmm3
  movdqu 16(%r8), %xmm4
  movdqu 32(%r8), %xmm5
  movdqu 48(%r8), %xmm6
  paddd %xmm15, %xmm9
  paddd %xmm15, %xmm10
  pxor %xmm3, %xmm2
  pxor %xmm3, %xmm12
  pxor %xmm3, %xmm13
  pxor %xmm3, %xmm14
  pshufb %xmm0, %xmm9
  pshufb %xmm0, %xmm10
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenc %xmm5, %xmm2
  aesenc %xmm5, %xmm12
  aesenc %xmm5, %xmm13
  aesenc %xmm5, %xmm14
  aesenc %xmm6, %xmm2
  aesenc %xmm6, %xmm12
  aesenc %xmm6, %xmm13
  aesenc %xmm6, %xmm14
  movdqu 64(%r8), %xmm3
  movdqu 80(%r8), %xmm4
  movdqu 96(%r8), %xmm5
  movdqu 112(%r8), %xmm6
  aesenc %xmm3, %xmm2
  aesenc %xmm3, %xmm12
  aesenc %xmm3, %xmm13
  aesenc %xmm3, %xmm14
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenc %xmm5, %xmm2
  aesenc %xmm5, %xmm12
  aesenc %xmm5, %xmm13
  aesenc %xmm5, %xmm14
  aesenc %xmm6, %xmm2
  aesenc %xmm6, %xmm12
  aesenc %xmm6, %xmm13
  aesenc %xmm6, %xmm14
  movdqu 128(%r8), %xmm3
  movdqu 144(%r8), %xmm4
  movdqu 160(%r8), %xmm5
  aesenc %xmm3, %xmm2
  aesenc %xmm3, %xmm12
  aesenc %xmm3, %xmm13
  aesenc %xmm3, %xmm14
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenclast %xmm5, %xmm2
  aesenclast %xmm5, %xmm12
  aesenclast %xmm5, %xmm13
  aesenclast %xmm5, %xmm14
  movdqu 0(%r9), %xmm7
  pxor %xmm7, %xmm2
  movdqu 16(%r9), %xmm7
  pxor %xmm7, %xmm12
  movdqu 32(%r9), %xmm7
  pxor %xmm7, %xmm13
  movdqu 48(%r9), %xmm7
  pxor %xmm7, %xmm14
  movdqu %xmm2, 0(%r10)
  movdqu %xmm12, 16(%r10)
  movdqu %xmm13, 32(%r10)
  movdqu %xmm14, 48(%r10)
  sub $1, %rdx
  add $64, %r9
  add $64, %r10
.balign 16
L3:
  cmp $0, %rdx
  ja L2
  movdqu %xmm9, %xmm7
  pinsrq $0, %rdi, %xmm7
  pshufb %xmm8, %xmm7
  mov %r9, %rax
  mov %r10, %rbx
  jmp L1
L0:
L1:
  mov $0, %rdx
  mov %rax, %r9
  mov %rbx, %r10
  pxor %xmm4, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  jmp L5
.balign 16
L4:
  movdqu %xmm7, %xmm0
  pshufb %xmm8, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r9), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rdx
  add $16, %r9
  add $16, %r10
  paddd %xmm4, %xmm7
.balign 16
L5:
  cmp %rcx, %rdx
  jne L4
  cmp %rbp, %rsi
  jbe L6
  movdqu 0(%r13), %xmm1
  movdqu %xmm7, %xmm0
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm2
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm2
  pshufb %xmm2, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pxor %xmm0, %xmm1
  movdqu %xmm1, 0(%r13)
  jmp L7
L6:
L7:
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  ret

.global gctr256_bytes
gctr256_bytes:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov 272(%rsp), %rax
  movdqu 0(%rax), %xmm7
  mov %rcx, %rax
  mov %r8, %rbx
  mov %rdx, %rsi
  mov %r9, %r13
  mov 264(%rsp), %r8
  mov 280(%rsp), %rcx
  mov %rcx, %rbp
  imul $16, %rbp
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm8
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm8
  mov %rcx, %rdx
  shr $2, %rdx
  and $3, %rcx
  cmp $0, %rdx
  jbe L8
  mov %rax, %r9
  mov %rbx, %r10
  pshufb %xmm8, %xmm7
  movdqu %xmm7, %xmm9
  mov $579005069656919567, %rax
  pinsrq $0, %rax, %xmm0
  mov $579005069656919567, %rax
  pinsrq $1, %rax, %xmm0
  pshufb %xmm0, %xmm9
  movdqu %xmm9, %xmm10
  pxor %xmm3, %xmm3
  mov $1, %rax
  pinsrd $2, %eax, %xmm3
  paddd %xmm3, %xmm9
  mov $3, %rax
  pinsrd $2, %eax, %xmm3
  mov $2, %rax
  pinsrd $0, %eax, %xmm3
  paddd %xmm3, %xmm10
  pshufb %xmm8, %xmm9
  pshufb %xmm8, %xmm10
  pextrq $0, %xmm7, %rdi
  mov $283686952306183, %rax
  pinsrq $0, %rax, %xmm0
  mov $579005069656919567, %rax
  pinsrq $1, %rax, %xmm0
  pxor %xmm15, %xmm15
  mov $4, %rax
  pinsrd $0, %eax, %xmm15
  mov $4, %rax
  pinsrd $2, %eax, %xmm15
  jmp L11
.balign 16
L10:
  pinsrq $0, %rdi, %xmm2
  pinsrq $0, %rdi, %xmm12
  pinsrq $0, %rdi, %xmm13
  pinsrq $0, %rdi, %xmm14
  shufpd $2, %xmm9, %xmm2
  shufpd $0, %xmm9, %xmm12
  shufpd $2, %xmm10, %xmm13
  shufpd $0, %xmm10, %xmm14
  pshufb %xmm0, %xmm9
  pshufb %xmm0, %xmm10
  movdqu 0(%r8), %xmm3
  movdqu 16(%r8), %xmm4
  movdqu 32(%r8), %xmm5
  movdqu 48(%r8), %xmm6
  paddd %xmm15, %xmm9
  paddd %xmm15, %xmm10
  pxor %xmm3, %xmm2
  pxor %xmm3, %xmm12
  pxor %xmm3, %xmm13
  pxor %xmm3, %xmm14
  pshufb %xmm0, %xmm9
  pshufb %xmm0, %xmm10
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenc %xmm5, %xmm2
  aesenc %xmm5, %xmm12
  aesenc %xmm5, %xmm13
  aesenc %xmm5, %xmm14
  aesenc %xmm6, %xmm2
  aesenc %xmm6, %xmm12
  aesenc %xmm6, %xmm13
  aesenc %xmm6, %xmm14
  movdqu 64(%r8), %xmm3
  movdqu 80(%r8), %xmm4
  movdqu 96(%r8), %xmm5
  movdqu 112(%r8), %xmm6
  aesenc %xmm3, %xmm2
  aesenc %xmm3, %xmm12
  aesenc %xmm3, %xmm13
  aesenc %xmm3, %xmm14
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenc %xmm5, %xmm2
  aesenc %xmm5, %xmm12
  aesenc %xmm5, %xmm13
  aesenc %xmm5, %xmm14
  aesenc %xmm6, %xmm2
  aesenc %xmm6, %xmm12
  aesenc %xmm6, %xmm13
  aesenc %xmm6, %xmm14
  movdqu 128(%r8), %xmm3
  movdqu 144(%r8), %xmm4
  movdqu 160(%r8), %xmm5
  aesenc %xmm3, %xmm2
  aesenc %xmm3, %xmm12
  aesenc %xmm3, %xmm13
  aesenc %xmm3, %xmm14
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  movdqu %xmm5, %xmm3
  movdqu 176(%r8), %xmm4
  movdqu 192(%r8), %xmm5
  movdqu 208(%r8), %xmm6
  aesenc %xmm3, %xmm2
  aesenc %xmm3, %xmm12
  aesenc %xmm3, %xmm13
  aesenc %xmm3, %xmm14
  aesenc %xmm4, %xmm2
  aesenc %xmm4, %xmm12
  aesenc %xmm4, %xmm13
  aesenc %xmm4, %xmm14
  aesenc %xmm5, %xmm2
  aesenc %xmm5, %xmm12
  aesenc %xmm5, %xmm13
  aesenc %xmm5, %xmm14
  aesenc %xmm6, %xmm2
  aesenc %xmm6, %xmm12
  aesenc %xmm6, %xmm13
  aesenc %xmm6, %xmm14
  movdqu 224(%r8), %xmm5
  aesenclast %xmm5, %xmm2
  aesenclast %xmm5, %xmm12
  aesenclast %xmm5, %xmm13
  aesenclast %xmm5, %xmm14
  movdqu 0(%r9), %xmm7
  pxor %xmm7, %xmm2
  movdqu 16(%r9), %xmm7
  pxor %xmm7, %xmm12
  movdqu 32(%r9), %xmm7
  pxor %xmm7, %xmm13
  movdqu 48(%r9), %xmm7
  pxor %xmm7, %xmm14
  movdqu %xmm2, 0(%r10)
  movdqu %xmm12, 16(%r10)
  movdqu %xmm13, 32(%r10)
  movdqu %xmm14, 48(%r10)
  sub $1, %rdx
  add $64, %r9
  add $64, %r10
.balign 16
L11:
  cmp $0, %rdx
  ja L10
  movdqu %xmm9, %xmm7
  pinsrq $0, %rdi, %xmm7
  pshufb %xmm8, %xmm7
  mov %r9, %rax
  mov %r10, %rbx
  jmp L9
L8:
L9:
  mov $0, %rdx
  mov %rax, %r9
  mov %rbx, %r10
  pxor %xmm4, %xmm4
  mov $1, %r12
  pinsrd $0, %r12d, %xmm4
  jmp L13
.balign 16
L12:
  movdqu %xmm7, %xmm0
  pshufb %xmm8, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r9), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rdx
  add $16, %r9
  add $16, %r10
  paddd %xmm4, %xmm7
.balign 16
L13:
  cmp %rcx, %rdx
  jne L12
  cmp %rbp, %rsi
  jbe L14
  movdqu 0(%r13), %xmm1
  movdqu %xmm7, %xmm0
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm2
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm2
  pshufb %xmm2, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pxor %xmm0, %xmm1
  movdqu %xmm1, 0(%r13)
  jmp L15
L14:
L15:
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  ret

.global compute_iv_stdcall
compute_iv_stdcall:
  cmp $12, %rdx
  jne L16
  push %rdi
  push %rsi
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 56(%rsp), %r8
  mov 64(%rsp), %r9
  cmp $12, %rsi
  jne L18
  movdqu 0(%r8), %xmm0
  mov $579005069656919567, %rax
  pinsrq $0, %rax, %xmm1
  mov $283686952306183, %rax
  pinsrq $1, %rax, %xmm1
  pshufb %xmm1, %xmm0
  mov $1, %rax
  pinsrd $0, %eax, %xmm0
  movdqu %xmm0, 0(%rcx)
  jmp L19
L18:
  mov %rcx, %rax
  add $32, %r9
  mov %r8, %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L21
.balign 16
L20:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L21:
  cmp $6, %rdx
  jae L20
  cmp $0, %rdx
  jbe L22
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L24
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L25
L24:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L26
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L28
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L30
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L31
L30:
L31:
  jmp L29
L28:
L29:
  jmp L27
L26:
L27:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L25:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L23
L22:
L23:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L32
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L34
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L35
L34:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L35:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L33
L32:
L33:
  mov %rax, %rcx
  mov $0, %r11
  mov %rsi, %r13
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu %xmm8, 0(%rcx)
L19:
  pop %rsi
  pop %rdi
  jmp L17
L16:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 264(%rsp), %r8
  mov 272(%rsp), %r9
  cmp $12, %rsi
  jne L36
  movdqu 0(%r8), %xmm0
  mov $579005069656919567, %rax
  pinsrq $0, %rax, %xmm1
  mov $283686952306183, %rax
  pinsrq $1, %rax, %xmm1
  pshufb %xmm1, %xmm0
  mov $1, %rax
  pinsrd $0, %eax, %xmm0
  movdqu %xmm0, 0(%rcx)
  jmp L37
L36:
  mov %rcx, %rax
  add $32, %r9
  mov %r8, %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L39
.balign 16
L38:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L39:
  cmp $6, %rdx
  jae L38
  cmp $0, %rdx
  jbe L40
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L42
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L43
L42:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L44
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L46
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L48
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L49
L48:
L49:
  jmp L47
L46:
L47:
  jmp L45
L44:
L45:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L43:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L41
L40:
L41:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L50
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L52
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L53
L52:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L53:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L51
L50:
L51:
  mov %rax, %rcx
  mov $0, %r11
  mov %rsi, %r13
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu %xmm8, 0(%rcx)
L37:
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
L17:
  ret

.global gcm128_encrypt_opt
gcm128_encrypt_opt:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 264(%rsp), %r8
  mov 272(%rsp), %r9
  mov 352(%rsp), %rbp
  mov %rcx, %r13
  lea 32(%r9), %r9
  mov 280(%rsp), %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L55
.balign 16
L54:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L55:
  cmp $6, %rdx
  jae L54
  cmp $0, %rdx
  jbe L56
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L58
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L59
L58:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L60
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L62
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L64
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L65
L64:
L65:
  jmp L63
L62:
L63:
  jmp L61
L60:
L61:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L59:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L57
L56:
L57:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L66
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L68
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L69
L68:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L69:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L67
L66:
L67:
  mov 288(%rsp), %rdi
  mov 296(%rsp), %rsi
  mov 304(%rsp), %rdx
  mov %r13, %rcx
  movdqu %xmm9, %xmm0
  movdqu 0(%r8), %xmm1
  movdqu %xmm1, 0(%rbp)
  pxor %xmm10, %xmm10
  mov $1, %r11
  pinsrq $0, %r11, %xmm10
  vpaddd %xmm10, %xmm1, %xmm1
  cmp $0, %rdx
  jne L70
  vpshufb %xmm0, %xmm1, %xmm1
  movdqu %xmm1, 32(%rbp)
  jmp L71
L70:
  movdqu %xmm8, 32(%rbp)
  add $128, %rcx
  pextrq $0, %xmm1, %rbx
  and $255, %rbx
  vpshufb %xmm0, %xmm1, %xmm1
  lea 96(%rsi), %r14
  movdqu -128(%rcx), %xmm4
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  movdqu -112(%rcx), %xmm15
  mov %rcx, %r12
  sub $96, %r12
  vpxor %xmm4, %xmm1, %xmm9
  add $6, %rbx
  cmp $256, %rbx
  jae L72
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm2, %xmm11, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm2, %xmm12, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpaddd %xmm2, %xmm14, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
  jmp L73
L72:
  sub $256, %rbx
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpshufb %xmm0, %xmm14, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpshufb %xmm0, %xmm1, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
L73:
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 16(%rcx), %xmm15
  movdqu 32(%rcx), %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 0(%rdi), %xmm3, %xmm4
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor 16(%rdi), %xmm3, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 32(%rdi), %xmm3, %xmm6
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 48(%rdi), %xmm3, %xmm8
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 64(%rdi), %xmm3, %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 80(%rdi), %xmm3, %xmm3
  lea 96(%rdi), %rdi
  vaesenclast %xmm4, %xmm9, %xmm9
  vaesenclast %xmm5, %xmm10, %xmm10
  vaesenclast %xmm6, %xmm11, %xmm11
  vaesenclast %xmm8, %xmm12, %xmm12
  vaesenclast %xmm2, %xmm13, %xmm13
  vaesenclast %xmm3, %xmm14, %xmm14
  movdqu %xmm9, 0(%rsi)
  movdqu %xmm10, 16(%rsi)
  movdqu %xmm11, 32(%rsi)
  movdqu %xmm12, 48(%rsi)
  movdqu %xmm13, 64(%rsi)
  movdqu %xmm14, 80(%rsi)
  lea 96(%rsi), %rsi
  vpshufb %xmm0, %xmm9, %xmm8
  vpshufb %xmm0, %xmm10, %xmm2
  movdqu %xmm8, 112(%rbp)
  vpshufb %xmm0, %xmm11, %xmm4
  movdqu %xmm2, 96(%rbp)
  vpshufb %xmm0, %xmm12, %xmm5
  movdqu %xmm4, 80(%rbp)
  vpshufb %xmm0, %xmm13, %xmm6
  movdqu %xmm5, 64(%rbp)
  vpshufb %xmm0, %xmm14, %xmm7
  movdqu %xmm6, 48(%rbp)
  movdqu -128(%rcx), %xmm4
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  movdqu -112(%rcx), %xmm15
  mov %rcx, %r12
  sub $96, %r12
  vpxor %xmm4, %xmm1, %xmm9
  add $6, %rbx
  cmp $256, %rbx
  jae L74
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm2, %xmm11, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm2, %xmm12, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpaddd %xmm2, %xmm14, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
  jmp L75
L74:
  sub $256, %rbx
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpshufb %xmm0, %xmm14, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpshufb %xmm0, %xmm1, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
L75:
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 16(%rcx), %xmm15
  movdqu 32(%rcx), %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 0(%rdi), %xmm3, %xmm4
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor 16(%rdi), %xmm3, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 32(%rdi), %xmm3, %xmm6
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 48(%rdi), %xmm3, %xmm8
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 64(%rdi), %xmm3, %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 80(%rdi), %xmm3, %xmm3
  lea 96(%rdi), %rdi
  vaesenclast %xmm4, %xmm9, %xmm9
  vaesenclast %xmm5, %xmm10, %xmm10
  vaesenclast %xmm6, %xmm11, %xmm11
  vaesenclast %xmm8, %xmm12, %xmm12
  vaesenclast %xmm2, %xmm13, %xmm13
  vaesenclast %xmm3, %xmm14, %xmm14
  movdqu %xmm9, 0(%rsi)
  movdqu %xmm10, 16(%rsi)
  movdqu %xmm11, 32(%rsi)
  movdqu %xmm12, 48(%rsi)
  movdqu %xmm13, 64(%rsi)
  movdqu %xmm14, 80(%rsi)
  lea 96(%rsi), %rsi
  sub $12, %rdx
  movdqu 32(%rbp), %xmm8
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vpxor %xmm4, %xmm4, %xmm4
  movdqu -128(%rcx), %xmm15
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpaddd %xmm2, %xmm11, %xmm12
  vpaddd %xmm2, %xmm12, %xmm13
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm4, 16(%rbp)
  jmp L77
.balign 16
L76:
  add $6, %rbx
  cmp $256, %rbx
  jb L78
  mov $579005069656919567, %r11
  pinsrq $0, %r11, %xmm0
  mov $283686952306183, %r11
  pinsrq $1, %r11, %xmm0
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  movdqu -32(%r9), %xmm3
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm15, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm15, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpshufb %xmm0, %xmm14, %xmm14
  vpshufb %xmm0, %xmm1, %xmm1
  sub $256, %rbx
  jmp L79
L78:
  movdqu -32(%r9), %xmm3
  vpaddd %xmm14, %xmm2, %xmm1
  vpxor %xmm15, %xmm10, %xmm10
  vpxor %xmm15, %xmm11, %xmm11
L79:
  movdqu %xmm1, 128(%rbp)
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  vpxor %xmm15, %xmm12, %xmm12
  movdqu -112(%rcx), %xmm2
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vaesenc %xmm2, %xmm9, %xmm9
  movdqu 48(%rbp), %xmm0
  vpxor %xmm15, %xmm13, %xmm13
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vaesenc %xmm2, %xmm10, %xmm10
  vpxor %xmm15, %xmm14, %xmm14
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  vaesenc %xmm2, %xmm11, %xmm11
  movdqu -16(%r9), %xmm3
  vaesenc %xmm2, %xmm12, %xmm12
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vaesenc %xmm2, %xmm13, %xmm13
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vaesenc %xmm2, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 88(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 80(%r14), %r12
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 32(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 40(%rbp)
  movdqu 16(%r9), %xmm5
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vaesenc %xmm15, %xmm11, %xmm11
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 72(%r14), %r13
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 64(%r14), %r12
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 48(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 56(%rbp)
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 56(%r14), %r13
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 48(%r14), %r12
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 64(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 72(%rbp)
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 40(%r14), %r13
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 32(%r14), %r12
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 80(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 88(%rbp)
  vpxor %xmm5, %xmm6, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor %xmm1, %xmm6, %xmm6
  movdqu -16(%rcx), %xmm15
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $13979173243358019584, %r11
  pinsrq $1, %r11, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm8, %xmm7, %xmm7
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm5, %xmm4, %xmm4
  movbeq 24(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 16(%r14), %r12
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  movq %r13, 96(%rbp)
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r12, 104(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm1
  vaesenc %xmm1, %xmm9, %xmm9
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm1, %xmm10, %xmm10
  vpsrldq $8, %xmm6, %xmm6
  vaesenc %xmm1, %xmm11, %xmm11
  vpxor %xmm6, %xmm7, %xmm7
  vaesenc %xmm1, %xmm12, %xmm12
  vpxor %xmm0, %xmm4, %xmm4
  movbeq 8(%r14), %r13
  vaesenc %xmm1, %xmm13, %xmm13
  movbeq 0(%r14), %r12
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  movdqu %xmm7, 16(%rbp)
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vaesenc %xmm15, %xmm10, %xmm10
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor 0(%rdi), %xmm1, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 16(%rdi), %xmm1, %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 32(%rdi), %xmm1, %xmm5
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 48(%rdi), %xmm1, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 64(%rdi), %xmm1, %xmm7
  vpxor 80(%rdi), %xmm1, %xmm3
  movdqu 128(%rbp), %xmm1
  vaesenclast %xmm2, %xmm9, %xmm9
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vaesenclast %xmm0, %xmm10, %xmm10
  vpaddd %xmm2, %xmm1, %xmm0
  movq %r13, 112(%rbp)
  lea 96(%rdi), %rdi
  vaesenclast %xmm5, %xmm11, %xmm11
  vpaddd %xmm2, %xmm0, %xmm5
  movq %r12, 120(%rbp)
  lea 96(%rsi), %rsi
  movdqu -128(%rcx), %xmm15
  vaesenclast %xmm6, %xmm12, %xmm12
  vpaddd %xmm2, %xmm5, %xmm6
  vaesenclast %xmm7, %xmm13, %xmm13
  vpaddd %xmm2, %xmm6, %xmm7
  vaesenclast %xmm3, %xmm14, %xmm14
  vpaddd %xmm2, %xmm7, %xmm3
  sub $6, %rdx
  add $96, %r14
  cmp $0, %rdx
  jbe L80
  movdqu %xmm9, -96(%rsi)
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm0, %xmm10
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm5, %xmm11
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm6, %xmm12
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm7, %xmm13
  movdqu %xmm14, -16(%rsi)
  movdqu %xmm3, %xmm14
  movdqu 32(%rbp), %xmm7
  jmp L81
L80:
  vpxor 16(%rbp), %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
L81:
.balign 16
L77:
  cmp $0, %rdx
  ja L76
  movdqu 32(%rbp), %xmm7
  movdqu %xmm1, 32(%rbp)
  pxor %xmm4, %xmm4
  movdqu %xmm4, 16(%rbp)
  movdqu -32(%r9), %xmm3
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  movdqu 48(%rbp), %xmm0
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  movdqu -16(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  movdqu 16(%r9), %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vpxor %xmm5, %xmm6, %xmm6
  vpxor %xmm1, %xmm6, %xmm6
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $3254779904, %rax
  pinsrd $3, %eax, %xmm3
  vpxor %xmm8, %xmm7, %xmm7
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm0
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm0
  movdqu %xmm9, -96(%rsi)
  vpshufb %xmm0, %xmm9, %xmm9
  vpxor %xmm7, %xmm1, %xmm1
  movdqu %xmm10, -80(%rsi)
  vpshufb %xmm0, %xmm10, %xmm10
  movdqu %xmm11, -64(%rsi)
  vpshufb %xmm0, %xmm11, %xmm11
  movdqu %xmm12, -48(%rsi)
  vpshufb %xmm0, %xmm12, %xmm12
  movdqu %xmm13, -32(%rsi)
  vpshufb %xmm0, %xmm13, %xmm13
  movdqu %xmm14, -16(%rsi)
  vpshufb %xmm0, %xmm14, %xmm14
  pxor %xmm4, %xmm4
  movdqu %xmm14, %xmm7
  movdqu %xmm4, 16(%rbp)
  movdqu %xmm13, 48(%rbp)
  movdqu %xmm12, 64(%rbp)
  movdqu %xmm11, 80(%rbp)
  movdqu %xmm10, 96(%rbp)
  movdqu %xmm9, 112(%rbp)
  movdqu -32(%r9), %xmm3
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  movdqu 48(%rbp), %xmm0
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  movdqu -16(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  movdqu 16(%r9), %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vpxor %xmm5, %xmm6, %xmm6
  vpxor %xmm1, %xmm6, %xmm6
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $3254779904, %rax
  pinsrd $3, %eax, %xmm3
  vpxor %xmm8, %xmm7, %xmm7
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  sub $128, %rcx
L71:
  movdqu 32(%rbp), %xmm11
  mov %rcx, %r8
  mov 312(%rsp), %rax
  mov 320(%rsp), %rdi
  mov 328(%rsp), %rdx
  mov %rdx, %r14
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm9
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm9
  pshufb %xmm9, %xmm11
  pxor %xmm10, %xmm10
  mov $1, %rbx
  pinsrd $0, %ebx, %xmm10
  mov %rax, %r11
  mov %rdi, %r10
  mov $0, %rbx
  jmp L83
.balign 16
L82:
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r11), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rbx
  add $16, %r11
  add $16, %r10
  paddd %xmm10, %xmm11
.balign 16
L83:
  cmp %rdx, %rbx
  jne L82
  mov %rdi, %r11
  jmp L85
.balign 16
L84:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L85:
  cmp $6, %rdx
  jae L84
  cmp $0, %rdx
  jbe L86
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L88
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L89
L88:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L90
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L92
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L94
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L95
L94:
L95:
  jmp L93
L92:
L93:
  jmp L91
L90:
L91:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L89:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L87
L86:
L87:
  add 304(%rsp), %r14
  imul $16, %r14
  mov 344(%rsp), %r13
  cmp %r14, %r13
  jbe L96
  mov 336(%rsp), %rax
  mov %r13, %r10
  and $15, %r10
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%rax), %xmm4
  pxor %xmm4, %xmm0
  movdqu %xmm0, 0(%rax)
  cmp $8, %r10
  jae L98
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L99
L98:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L99:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L97
L96:
L97:
  mov %r15, %r11
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu 0(%rbp), %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm9, %xmm8
  pxor %xmm0, %xmm8
  mov 360(%rsp), %r15
  movdqu %xmm8, 0(%r15)
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  ret

.global gcm256_encrypt_opt
gcm256_encrypt_opt:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 264(%rsp), %r8
  mov 272(%rsp), %r9
  mov 352(%rsp), %rbp
  mov %rcx, %r13
  lea 32(%r9), %r9
  mov 280(%rsp), %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L101
.balign 16
L100:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L101:
  cmp $6, %rdx
  jae L100
  cmp $0, %rdx
  jbe L102
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L104
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L105
L104:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L106
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L108
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L110
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L111
L110:
L111:
  jmp L109
L108:
L109:
  jmp L107
L106:
L107:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L105:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L103
L102:
L103:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L112
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L114
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L115
L114:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L115:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L113
L112:
L113:
  mov 288(%rsp), %rdi
  mov 296(%rsp), %rsi
  mov 304(%rsp), %rdx
  mov %r13, %rcx
  movdqu %xmm9, %xmm0
  movdqu 0(%r8), %xmm1
  movdqu %xmm1, 0(%rbp)
  pxor %xmm10, %xmm10
  mov $1, %r11
  pinsrq $0, %r11, %xmm10
  vpaddd %xmm10, %xmm1, %xmm1
  cmp $0, %rdx
  jne L116
  vpshufb %xmm0, %xmm1, %xmm1
  movdqu %xmm1, 32(%rbp)
  jmp L117
L116:
  movdqu %xmm8, 32(%rbp)
  add $128, %rcx
  pextrq $0, %xmm1, %rbx
  and $255, %rbx
  vpshufb %xmm0, %xmm1, %xmm1
  lea 96(%rsi), %r14
  movdqu -128(%rcx), %xmm4
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  movdqu -112(%rcx), %xmm15
  mov %rcx, %r12
  sub $96, %r12
  vpxor %xmm4, %xmm1, %xmm9
  add $6, %rbx
  cmp $256, %rbx
  jae L118
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm2, %xmm11, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm2, %xmm12, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpaddd %xmm2, %xmm14, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
  jmp L119
L118:
  sub $256, %rbx
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpshufb %xmm0, %xmm14, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpshufb %xmm0, %xmm1, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
L119:
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 80(%rcx), %xmm15
  movdqu 96(%rcx), %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 0(%rdi), %xmm3, %xmm4
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor 16(%rdi), %xmm3, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 32(%rdi), %xmm3, %xmm6
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 48(%rdi), %xmm3, %xmm8
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 64(%rdi), %xmm3, %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 80(%rdi), %xmm3, %xmm3
  lea 96(%rdi), %rdi
  vaesenclast %xmm4, %xmm9, %xmm9
  vaesenclast %xmm5, %xmm10, %xmm10
  vaesenclast %xmm6, %xmm11, %xmm11
  vaesenclast %xmm8, %xmm12, %xmm12
  vaesenclast %xmm2, %xmm13, %xmm13
  vaesenclast %xmm3, %xmm14, %xmm14
  movdqu %xmm9, 0(%rsi)
  movdqu %xmm10, 16(%rsi)
  movdqu %xmm11, 32(%rsi)
  movdqu %xmm12, 48(%rsi)
  movdqu %xmm13, 64(%rsi)
  movdqu %xmm14, 80(%rsi)
  lea 96(%rsi), %rsi
  vpshufb %xmm0, %xmm9, %xmm8
  vpshufb %xmm0, %xmm10, %xmm2
  movdqu %xmm8, 112(%rbp)
  vpshufb %xmm0, %xmm11, %xmm4
  movdqu %xmm2, 96(%rbp)
  vpshufb %xmm0, %xmm12, %xmm5
  movdqu %xmm4, 80(%rbp)
  vpshufb %xmm0, %xmm13, %xmm6
  movdqu %xmm5, 64(%rbp)
  vpshufb %xmm0, %xmm14, %xmm7
  movdqu %xmm6, 48(%rbp)
  movdqu -128(%rcx), %xmm4
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  movdqu -112(%rcx), %xmm15
  mov %rcx, %r12
  sub $96, %r12
  vpxor %xmm4, %xmm1, %xmm9
  add $6, %rbx
  cmp $256, %rbx
  jae L120
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm2, %xmm11, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm2, %xmm12, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpaddd %xmm2, %xmm14, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
  jmp L121
L120:
  sub $256, %rbx
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm4, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm4, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpxor %xmm4, %xmm12, %xmm12
  vpshufb %xmm0, %xmm14, %xmm14
  vpxor %xmm4, %xmm13, %xmm13
  vpshufb %xmm0, %xmm1, %xmm1
  vpxor %xmm4, %xmm14, %xmm14
L121:
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 48(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 64(%rcx), %xmm15
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 80(%rcx), %xmm15
  movdqu 96(%rcx), %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 0(%rdi), %xmm3, %xmm4
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor 16(%rdi), %xmm3, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 32(%rdi), %xmm3, %xmm6
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 48(%rdi), %xmm3, %xmm8
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 64(%rdi), %xmm3, %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 80(%rdi), %xmm3, %xmm3
  lea 96(%rdi), %rdi
  vaesenclast %xmm4, %xmm9, %xmm9
  vaesenclast %xmm5, %xmm10, %xmm10
  vaesenclast %xmm6, %xmm11, %xmm11
  vaesenclast %xmm8, %xmm12, %xmm12
  vaesenclast %xmm2, %xmm13, %xmm13
  vaesenclast %xmm3, %xmm14, %xmm14
  movdqu %xmm9, 0(%rsi)
  movdqu %xmm10, 16(%rsi)
  movdqu %xmm11, 32(%rsi)
  movdqu %xmm12, 48(%rsi)
  movdqu %xmm13, 64(%rsi)
  movdqu %xmm14, 80(%rsi)
  lea 96(%rsi), %rsi
  sub $12, %rdx
  movdqu 32(%rbp), %xmm8
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vpxor %xmm4, %xmm4, %xmm4
  movdqu -128(%rcx), %xmm15
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpaddd %xmm2, %xmm11, %xmm12
  vpaddd %xmm2, %xmm12, %xmm13
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm4, 16(%rbp)
  jmp L123
.balign 16
L122:
  add $6, %rbx
  cmp $256, %rbx
  jb L124
  mov $579005069656919567, %r11
  pinsrq $0, %r11, %xmm0
  mov $283686952306183, %r11
  pinsrq $1, %r11, %xmm0
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  movdqu -32(%r9), %xmm3
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm15, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm15, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpshufb %xmm0, %xmm14, %xmm14
  vpshufb %xmm0, %xmm1, %xmm1
  sub $256, %rbx
  jmp L125
L124:
  movdqu -32(%r9), %xmm3
  vpaddd %xmm14, %xmm2, %xmm1
  vpxor %xmm15, %xmm10, %xmm10
  vpxor %xmm15, %xmm11, %xmm11
L125:
  movdqu %xmm1, 128(%rbp)
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  vpxor %xmm15, %xmm12, %xmm12
  movdqu -112(%rcx), %xmm2
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vaesenc %xmm2, %xmm9, %xmm9
  movdqu 48(%rbp), %xmm0
  vpxor %xmm15, %xmm13, %xmm13
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vaesenc %xmm2, %xmm10, %xmm10
  vpxor %xmm15, %xmm14, %xmm14
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  vaesenc %xmm2, %xmm11, %xmm11
  movdqu -16(%r9), %xmm3
  vaesenc %xmm2, %xmm12, %xmm12
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vaesenc %xmm2, %xmm13, %xmm13
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vaesenc %xmm2, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 88(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 80(%r14), %r12
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 32(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 40(%rbp)
  movdqu 16(%r9), %xmm5
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vaesenc %xmm15, %xmm11, %xmm11
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 72(%r14), %r13
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 64(%r14), %r12
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 48(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 56(%rbp)
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 56(%r14), %r13
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 48(%r14), %r12
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 64(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 72(%rbp)
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 40(%r14), %r13
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 32(%r14), %r12
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 80(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 88(%rbp)
  vpxor %xmm5, %xmm6, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor %xmm1, %xmm6, %xmm6
  movdqu -16(%rcx), %xmm15
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $13979173243358019584, %r11
  pinsrq $1, %r11, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm8, %xmm7, %xmm7
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm5, %xmm4, %xmm4
  movbeq 24(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 16(%r14), %r12
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  movq %r13, 96(%rbp)
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r12, 104(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm1
  vaesenc %xmm1, %xmm9, %xmm9
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm1, %xmm10, %xmm10
  vpsrldq $8, %xmm6, %xmm6
  vaesenc %xmm1, %xmm11, %xmm11
  vpxor %xmm6, %xmm7, %xmm7
  vaesenc %xmm1, %xmm12, %xmm12
  vpxor %xmm0, %xmm4, %xmm4
  movbeq 8(%r14), %r13
  vaesenc %xmm1, %xmm13, %xmm13
  movbeq 0(%r14), %r12
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  vaesenc %xmm1, %xmm9, %xmm9
  vaesenc %xmm1, %xmm10, %xmm10
  vaesenc %xmm1, %xmm11, %xmm11
  vaesenc %xmm1, %xmm12, %xmm12
  vaesenc %xmm1, %xmm13, %xmm13
  movdqu 48(%rcx), %xmm15
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 64(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  vaesenc %xmm1, %xmm9, %xmm9
  vaesenc %xmm1, %xmm10, %xmm10
  vaesenc %xmm1, %xmm11, %xmm11
  vaesenc %xmm1, %xmm12, %xmm12
  vaesenc %xmm1, %xmm13, %xmm13
  movdqu 80(%rcx), %xmm15
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 96(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  movdqu %xmm7, 16(%rbp)
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vaesenc %xmm15, %xmm10, %xmm10
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor 0(%rdi), %xmm1, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 16(%rdi), %xmm1, %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 32(%rdi), %xmm1, %xmm5
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 48(%rdi), %xmm1, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 64(%rdi), %xmm1, %xmm7
  vpxor 80(%rdi), %xmm1, %xmm3
  movdqu 128(%rbp), %xmm1
  vaesenclast %xmm2, %xmm9, %xmm9
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vaesenclast %xmm0, %xmm10, %xmm10
  vpaddd %xmm2, %xmm1, %xmm0
  movq %r13, 112(%rbp)
  lea 96(%rdi), %rdi
  vaesenclast %xmm5, %xmm11, %xmm11
  vpaddd %xmm2, %xmm0, %xmm5
  movq %r12, 120(%rbp)
  lea 96(%rsi), %rsi
  movdqu -128(%rcx), %xmm15
  vaesenclast %xmm6, %xmm12, %xmm12
  vpaddd %xmm2, %xmm5, %xmm6
  vaesenclast %xmm7, %xmm13, %xmm13
  vpaddd %xmm2, %xmm6, %xmm7
  vaesenclast %xmm3, %xmm14, %xmm14
  vpaddd %xmm2, %xmm7, %xmm3
  sub $6, %rdx
  add $96, %r14
  cmp $0, %rdx
  jbe L126
  movdqu %xmm9, -96(%rsi)
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm0, %xmm10
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm5, %xmm11
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm6, %xmm12
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm7, %xmm13
  movdqu %xmm14, -16(%rsi)
  movdqu %xmm3, %xmm14
  movdqu 32(%rbp), %xmm7
  jmp L127
L126:
  vpxor 16(%rbp), %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
L127:
.balign 16
L123:
  cmp $0, %rdx
  ja L122
  movdqu 32(%rbp), %xmm7
  movdqu %xmm1, 32(%rbp)
  pxor %xmm4, %xmm4
  movdqu %xmm4, 16(%rbp)
  movdqu -32(%r9), %xmm3
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  movdqu 48(%rbp), %xmm0
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  movdqu -16(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  movdqu 16(%r9), %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vpxor %xmm5, %xmm6, %xmm6
  vpxor %xmm1, %xmm6, %xmm6
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $3254779904, %rax
  pinsrd $3, %eax, %xmm3
  vpxor %xmm8, %xmm7, %xmm7
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm0
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm0
  movdqu %xmm9, -96(%rsi)
  vpshufb %xmm0, %xmm9, %xmm9
  vpxor %xmm7, %xmm1, %xmm1
  movdqu %xmm10, -80(%rsi)
  vpshufb %xmm0, %xmm10, %xmm10
  movdqu %xmm11, -64(%rsi)
  vpshufb %xmm0, %xmm11, %xmm11
  movdqu %xmm12, -48(%rsi)
  vpshufb %xmm0, %xmm12, %xmm12
  movdqu %xmm13, -32(%rsi)
  vpshufb %xmm0, %xmm13, %xmm13
  movdqu %xmm14, -16(%rsi)
  vpshufb %xmm0, %xmm14, %xmm14
  pxor %xmm4, %xmm4
  movdqu %xmm14, %xmm7
  movdqu %xmm4, 16(%rbp)
  movdqu %xmm13, 48(%rbp)
  movdqu %xmm12, 64(%rbp)
  movdqu %xmm11, 80(%rbp)
  movdqu %xmm10, 96(%rbp)
  movdqu %xmm9, 112(%rbp)
  movdqu -32(%r9), %xmm3
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  movdqu 48(%rbp), %xmm0
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  movdqu -16(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  movdqu 16(%r9), %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vpxor %xmm5, %xmm6, %xmm6
  vpxor %xmm1, %xmm6, %xmm6
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $3254779904, %rax
  pinsrd $3, %eax, %xmm3
  vpxor %xmm8, %xmm7, %xmm7
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  sub $128, %rcx
L117:
  movdqu 32(%rbp), %xmm11
  mov %rcx, %r8
  mov 312(%rsp), %rax
  mov 320(%rsp), %rdi
  mov 328(%rsp), %rdx
  mov %rdx, %r14
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm9
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm9
  pshufb %xmm9, %xmm11
  pxor %xmm10, %xmm10
  mov $1, %rbx
  pinsrd $0, %ebx, %xmm10
  mov %rax, %r11
  mov %rdi, %r10
  mov $0, %rbx
  jmp L129
.balign 16
L128:
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r11), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rbx
  add $16, %r11
  add $16, %r10
  paddd %xmm10, %xmm11
.balign 16
L129:
  cmp %rdx, %rbx
  jne L128
  mov %rdi, %r11
  jmp L131
.balign 16
L130:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L131:
  cmp $6, %rdx
  jae L130
  cmp $0, %rdx
  jbe L132
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L134
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L135
L134:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L136
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L138
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L140
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L141
L140:
L141:
  jmp L139
L138:
L139:
  jmp L137
L136:
L137:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L135:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L133
L132:
L133:
  add 304(%rsp), %r14
  imul $16, %r14
  mov 344(%rsp), %r13
  cmp %r14, %r13
  jbe L142
  mov 336(%rsp), %rax
  mov %r13, %r10
  and $15, %r10
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%rax), %xmm4
  pxor %xmm4, %xmm0
  movdqu %xmm0, 0(%rax)
  cmp $8, %r10
  jae L144
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L145
L144:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L145:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L143
L142:
L143:
  mov %r15, %r11
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu 0(%rbp), %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm9, %xmm8
  pxor %xmm0, %xmm8
  mov 360(%rsp), %r15
  movdqu %xmm8, 0(%r15)
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  ret

.global gcm128_decrypt_opt
gcm128_decrypt_opt:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 264(%rsp), %r8
  mov 272(%rsp), %r9
  mov 352(%rsp), %rbp
  mov %rcx, %r13
  lea 32(%r9), %r9
  mov 280(%rsp), %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L147
.balign 16
L146:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L147:
  cmp $6, %rdx
  jae L146
  cmp $0, %rdx
  jbe L148
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L150
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L151
L150:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L152
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L154
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L156
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L157
L156:
L157:
  jmp L155
L154:
L155:
  jmp L153
L152:
L153:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L151:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L149
L148:
L149:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L158
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L160
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L161
L160:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L161:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L159
L158:
L159:
  mov 288(%rsp), %rdi
  mov 296(%rsp), %rsi
  mov 304(%rsp), %rdx
  mov %r13, %rcx
  movdqu %xmm9, %xmm0
  movdqu 0(%r8), %xmm1
  movdqu %xmm1, 0(%rbp)
  pxor %xmm10, %xmm10
  mov $1, %r11
  pinsrq $0, %r11, %xmm10
  vpaddd %xmm10, %xmm1, %xmm1
  cmp $0, %rdx
  jne L162
  vpshufb %xmm0, %xmm1, %xmm1
  movdqu %xmm1, 32(%rbp)
  jmp L163
L162:
  movdqu %xmm8, 32(%rbp)
  add $128, %rcx
  pextrq $0, %xmm1, %rbx
  and $255, %rbx
  vpshufb %xmm0, %xmm1, %xmm1
  lea 96(%rdi), %r14
  movdqu 32(%rbp), %xmm8
  movdqu 80(%rdi), %xmm7
  movdqu 64(%rdi), %xmm4
  movdqu 48(%rdi), %xmm5
  movdqu 32(%rdi), %xmm6
  vpshufb %xmm0, %xmm7, %xmm7
  movdqu 16(%rdi), %xmm2
  vpshufb %xmm0, %xmm4, %xmm4
  movdqu 0(%rdi), %xmm3
  vpshufb %xmm0, %xmm5, %xmm5
  movdqu %xmm4, 48(%rbp)
  vpshufb %xmm0, %xmm6, %xmm6
  movdqu %xmm5, 64(%rbp)
  vpshufb %xmm0, %xmm2, %xmm2
  movdqu %xmm6, 80(%rbp)
  vpshufb %xmm0, %xmm3, %xmm3
  movdqu %xmm2, 96(%rbp)
  movdqu %xmm3, 112(%rbp)
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vpxor %xmm4, %xmm4, %xmm4
  movdqu -128(%rcx), %xmm15
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpaddd %xmm2, %xmm11, %xmm12
  vpaddd %xmm2, %xmm12, %xmm13
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm4, 16(%rbp)
  cmp $6, %rdx
  jne L164
  sub $96, %r14
  jmp L165
L164:
L165:
  jmp L167
.balign 16
L166:
  add $6, %rbx
  cmp $256, %rbx
  jb L168
  mov $579005069656919567, %r11
  pinsrq $0, %r11, %xmm0
  mov $283686952306183, %r11
  pinsrq $1, %r11, %xmm0
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  movdqu -32(%r9), %xmm3
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm15, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm15, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpshufb %xmm0, %xmm14, %xmm14
  vpshufb %xmm0, %xmm1, %xmm1
  sub $256, %rbx
  jmp L169
L168:
  movdqu -32(%r9), %xmm3
  vpaddd %xmm14, %xmm2, %xmm1
  vpxor %xmm15, %xmm10, %xmm10
  vpxor %xmm15, %xmm11, %xmm11
L169:
  movdqu %xmm1, 128(%rbp)
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  vpxor %xmm15, %xmm12, %xmm12
  movdqu -112(%rcx), %xmm2
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vaesenc %xmm2, %xmm9, %xmm9
  movdqu 48(%rbp), %xmm0
  vpxor %xmm15, %xmm13, %xmm13
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vaesenc %xmm2, %xmm10, %xmm10
  vpxor %xmm15, %xmm14, %xmm14
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  vaesenc %xmm2, %xmm11, %xmm11
  movdqu -16(%r9), %xmm3
  vaesenc %xmm2, %xmm12, %xmm12
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vaesenc %xmm2, %xmm13, %xmm13
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vaesenc %xmm2, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 88(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 80(%r14), %r12
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 32(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 40(%rbp)
  movdqu 16(%r9), %xmm5
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vaesenc %xmm15, %xmm11, %xmm11
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 72(%r14), %r13
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 64(%r14), %r12
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 48(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 56(%rbp)
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 56(%r14), %r13
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 48(%r14), %r12
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 64(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 72(%rbp)
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 40(%r14), %r13
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 32(%r14), %r12
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 80(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 88(%rbp)
  vpxor %xmm5, %xmm6, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor %xmm1, %xmm6, %xmm6
  movdqu -16(%rcx), %xmm15
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $13979173243358019584, %r11
  pinsrq $1, %r11, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm8, %xmm7, %xmm7
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm5, %xmm4, %xmm4
  movbeq 24(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 16(%r14), %r12
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  movq %r13, 96(%rbp)
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r12, 104(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm1
  vaesenc %xmm1, %xmm9, %xmm9
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm1, %xmm10, %xmm10
  vpsrldq $8, %xmm6, %xmm6
  vaesenc %xmm1, %xmm11, %xmm11
  vpxor %xmm6, %xmm7, %xmm7
  vaesenc %xmm1, %xmm12, %xmm12
  vpxor %xmm0, %xmm4, %xmm4
  movbeq 8(%r14), %r13
  vaesenc %xmm1, %xmm13, %xmm13
  movbeq 0(%r14), %r12
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  movdqu %xmm7, 16(%rbp)
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vaesenc %xmm15, %xmm10, %xmm10
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor 0(%rdi), %xmm1, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 16(%rdi), %xmm1, %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 32(%rdi), %xmm1, %xmm5
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 48(%rdi), %xmm1, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 64(%rdi), %xmm1, %xmm7
  vpxor 80(%rdi), %xmm1, %xmm3
  movdqu 128(%rbp), %xmm1
  vaesenclast %xmm2, %xmm9, %xmm9
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vaesenclast %xmm0, %xmm10, %xmm10
  vpaddd %xmm2, %xmm1, %xmm0
  movq %r13, 112(%rbp)
  lea 96(%rdi), %rdi
  vaesenclast %xmm5, %xmm11, %xmm11
  vpaddd %xmm2, %xmm0, %xmm5
  movq %r12, 120(%rbp)
  lea 96(%rsi), %rsi
  movdqu -128(%rcx), %xmm15
  vaesenclast %xmm6, %xmm12, %xmm12
  vpaddd %xmm2, %xmm5, %xmm6
  vaesenclast %xmm7, %xmm13, %xmm13
  vpaddd %xmm2, %xmm6, %xmm7
  vaesenclast %xmm3, %xmm14, %xmm14
  vpaddd %xmm2, %xmm7, %xmm3
  sub $6, %rdx
  cmp $6, %rdx
  jbe L170
  add $96, %r14
  jmp L171
L170:
L171:
  cmp $0, %rdx
  jbe L172
  movdqu %xmm9, -96(%rsi)
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm0, %xmm10
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm5, %xmm11
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm6, %xmm12
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm7, %xmm13
  movdqu %xmm14, -16(%rsi)
  movdqu %xmm3, %xmm14
  movdqu 32(%rbp), %xmm7
  jmp L173
L172:
  vpxor 16(%rbp), %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
L173:
.balign 16
L167:
  cmp $0, %rdx
  ja L166
  movdqu %xmm1, 32(%rbp)
  movdqu %xmm9, -96(%rsi)
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm14, -16(%rsi)
  sub $128, %rcx
L163:
  movdqu 32(%rbp), %xmm11
  mov %rcx, %r8
  mov 312(%rsp), %rax
  mov 320(%rsp), %rdi
  mov 328(%rsp), %rdx
  mov %rdx, %r14
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm9
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm9
  pshufb %xmm9, %xmm11
  mov %rdi, %rbx
  mov %rdx, %r12
  mov %rax, %rdi
  mov %rdi, %r11
  jmp L175
.balign 16
L174:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L175:
  cmp $6, %rdx
  jae L174
  cmp $0, %rdx
  jbe L176
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L178
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L179
L178:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L180
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L182
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L184
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L185
L184:
L185:
  jmp L183
L182:
L183:
  jmp L181
L180:
L181:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L179:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L177
L176:
L177:
  mov %rbx, %rdi
  mov %r12, %rdx
  pxor %xmm10, %xmm10
  mov $1, %rbx
  pinsrd $0, %ebx, %xmm10
  mov %rax, %r11
  mov %rdi, %r10
  mov $0, %rbx
  jmp L187
.balign 16
L186:
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r11), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rbx
  add $16, %r11
  add $16, %r10
  paddd %xmm10, %xmm11
.balign 16
L187:
  cmp %rdx, %rbx
  jne L186
  add 304(%rsp), %r14
  imul $16, %r14
  mov 344(%rsp), %r13
  cmp %r14, %r13
  jbe L188
  mov 336(%rsp), %rax
  mov %r13, %r10
  and $15, %r10
  movdqu 0(%rax), %xmm0
  movdqu %xmm0, %xmm10
  cmp $8, %r10
  jae L190
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L191
L190:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L191:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pxor %xmm0, %xmm10
  movdqu %xmm10, 0(%rax)
  jmp L189
L188:
L189:
  mov %r15, %r11
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu 0(%rbp), %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm9, %xmm8
  pxor %xmm0, %xmm8
  mov 360(%rsp), %r15
  movdqu 0(%r15), %xmm0
  pcmpeqd %xmm8, %xmm0
  pextrq $0, %xmm0, %rdx
  sub $18446744073709551615, %rdx
  mov $0, %rax
  adc $0, %rax
  pextrq $1, %xmm0, %rdx
  sub $18446744073709551615, %rdx
  mov $0, %rdx
  adc $0, %rdx
  add %rdx, %rax
  mov %rax, %rcx
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  mov %rcx, %rax
  ret

.global gcm256_decrypt_opt
gcm256_decrypt_opt:
  push %r15
  push %r14
  push %r13
  push %r12
  push %rsi
  push %rdi
  push %rbp
  push %rbx
  pextrq $0, %xmm15, %rax
  push %rax
  pextrq $1, %xmm15, %rax
  push %rax
  pextrq $0, %xmm14, %rax
  push %rax
  pextrq $1, %xmm14, %rax
  push %rax
  pextrq $0, %xmm13, %rax
  push %rax
  pextrq $1, %xmm13, %rax
  push %rax
  pextrq $0, %xmm12, %rax
  push %rax
  pextrq $1, %xmm12, %rax
  push %rax
  pextrq $0, %xmm11, %rax
  push %rax
  pextrq $1, %xmm11, %rax
  push %rax
  pextrq $0, %xmm10, %rax
  push %rax
  pextrq $1, %xmm10, %rax
  push %rax
  pextrq $0, %xmm9, %rax
  push %rax
  pextrq $1, %xmm9, %rax
  push %rax
  pextrq $0, %xmm8, %rax
  push %rax
  pextrq $1, %xmm8, %rax
  push %rax
  pextrq $0, %xmm7, %rax
  push %rax
  pextrq $1, %xmm7, %rax
  push %rax
  pextrq $0, %xmm6, %rax
  push %rax
  pextrq $1, %xmm6, %rax
  push %rax
  mov %rcx, %rdi
  mov %rdx, %rsi
  mov %r8, %rdx
  mov %r9, %rcx
  mov 264(%rsp), %r8
  mov 272(%rsp), %r9
  mov 352(%rsp), %rbp
  mov %rcx, %r13
  lea 32(%r9), %r9
  mov 280(%rsp), %rbx
  mov %rdx, %rcx
  imul $16, %rcx
  mov $579005069656919567, %r10
  pinsrq $0, %r10, %xmm9
  mov $283686952306183, %r10
  pinsrq $1, %r10, %xmm9
  pxor %xmm8, %xmm8
  mov %rdi, %r11
  jmp L193
.balign 16
L192:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L193:
  cmp $6, %rdx
  jae L192
  cmp $0, %rdx
  jbe L194
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L196
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L197
L196:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L198
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L200
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L202
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L203
L202:
L203:
  jmp L201
L200:
L201:
  jmp L199
L198:
L199:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L197:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L195
L194:
L195:
  mov %rsi, %r15
  cmp %rcx, %rsi
  jbe L204
  movdqu 0(%rbx), %xmm0
  mov %rsi, %r10
  and $15, %r10
  cmp $8, %r10
  jae L206
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L207
L206:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L207:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L205
L204:
L205:
  mov 288(%rsp), %rdi
  mov 296(%rsp), %rsi
  mov 304(%rsp), %rdx
  mov %r13, %rcx
  movdqu %xmm9, %xmm0
  movdqu 0(%r8), %xmm1
  movdqu %xmm1, 0(%rbp)
  pxor %xmm10, %xmm10
  mov $1, %r11
  pinsrq $0, %r11, %xmm10
  vpaddd %xmm10, %xmm1, %xmm1
  cmp $0, %rdx
  jne L208
  vpshufb %xmm0, %xmm1, %xmm1
  movdqu %xmm1, 32(%rbp)
  jmp L209
L208:
  movdqu %xmm8, 32(%rbp)
  add $128, %rcx
  pextrq $0, %xmm1, %rbx
  and $255, %rbx
  vpshufb %xmm0, %xmm1, %xmm1
  lea 96(%rdi), %r14
  movdqu 32(%rbp), %xmm8
  movdqu 80(%rdi), %xmm7
  movdqu 64(%rdi), %xmm4
  movdqu 48(%rdi), %xmm5
  movdqu 32(%rdi), %xmm6
  vpshufb %xmm0, %xmm7, %xmm7
  movdqu 16(%rdi), %xmm2
  vpshufb %xmm0, %xmm4, %xmm4
  movdqu 0(%rdi), %xmm3
  vpshufb %xmm0, %xmm5, %xmm5
  movdqu %xmm4, 48(%rbp)
  vpshufb %xmm0, %xmm6, %xmm6
  movdqu %xmm5, 64(%rbp)
  vpshufb %xmm0, %xmm2, %xmm2
  movdqu %xmm6, 80(%rbp)
  vpshufb %xmm0, %xmm3, %xmm3
  movdqu %xmm2, 96(%rbp)
  movdqu %xmm3, 112(%rbp)
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vpxor %xmm4, %xmm4, %xmm4
  movdqu -128(%rcx), %xmm15
  vpaddd %xmm2, %xmm1, %xmm10
  vpaddd %xmm2, %xmm10, %xmm11
  vpaddd %xmm2, %xmm11, %xmm12
  vpaddd %xmm2, %xmm12, %xmm13
  vpaddd %xmm2, %xmm13, %xmm14
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm4, 16(%rbp)
  cmp $6, %rdx
  jne L210
  sub $96, %r14
  jmp L211
L210:
L211:
  jmp L213
.balign 16
L212:
  add $6, %rbx
  cmp $256, %rbx
  jb L214
  mov $579005069656919567, %r11
  pinsrq $0, %r11, %xmm0
  mov $283686952306183, %r11
  pinsrq $1, %r11, %xmm0
  vpshufb %xmm0, %xmm1, %xmm6
  pxor %xmm5, %xmm5
  mov $1, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm10
  pxor %xmm5, %xmm5
  mov $2, %r11
  pinsrq $0, %r11, %xmm5
  vpaddd %xmm5, %xmm6, %xmm11
  movdqu -32(%r9), %xmm3
  vpaddd %xmm5, %xmm10, %xmm12
  vpshufb %xmm0, %xmm10, %xmm10
  vpaddd %xmm5, %xmm11, %xmm13
  vpshufb %xmm0, %xmm11, %xmm11
  vpxor %xmm15, %xmm10, %xmm10
  vpaddd %xmm5, %xmm12, %xmm14
  vpshufb %xmm0, %xmm12, %xmm12
  vpxor %xmm15, %xmm11, %xmm11
  vpaddd %xmm5, %xmm13, %xmm1
  vpshufb %xmm0, %xmm13, %xmm13
  vpshufb %xmm0, %xmm14, %xmm14
  vpshufb %xmm0, %xmm1, %xmm1
  sub $256, %rbx
  jmp L215
L214:
  movdqu -32(%r9), %xmm3
  vpaddd %xmm14, %xmm2, %xmm1
  vpxor %xmm15, %xmm10, %xmm10
  vpxor %xmm15, %xmm11, %xmm11
L215:
  movdqu %xmm1, 128(%rbp)
  vpclmulqdq $16, %xmm3, %xmm7, %xmm5
  vpxor %xmm15, %xmm12, %xmm12
  movdqu -112(%rcx), %xmm2
  vpclmulqdq $1, %xmm3, %xmm7, %xmm6
  vaesenc %xmm2, %xmm9, %xmm9
  movdqu 48(%rbp), %xmm0
  vpxor %xmm15, %xmm13, %xmm13
  vpclmulqdq $0, %xmm3, %xmm7, %xmm1
  vaesenc %xmm2, %xmm10, %xmm10
  vpxor %xmm15, %xmm14, %xmm14
  vpclmulqdq $17, %xmm3, %xmm7, %xmm7
  vaesenc %xmm2, %xmm11, %xmm11
  movdqu -16(%r9), %xmm3
  vaesenc %xmm2, %xmm12, %xmm12
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $0, %xmm3, %xmm0, %xmm5
  vpxor %xmm4, %xmm8, %xmm8
  vaesenc %xmm2, %xmm13, %xmm13
  vpxor %xmm5, %xmm1, %xmm4
  vpclmulqdq $16, %xmm3, %xmm0, %xmm1
  vaesenc %xmm2, %xmm14, %xmm14
  movdqu -96(%rcx), %xmm15
  vpclmulqdq $1, %xmm3, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor 16(%rbp), %xmm8, %xmm8
  vpclmulqdq $17, %xmm3, %xmm0, %xmm3
  movdqu 64(%rbp), %xmm0
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 88(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 80(%r14), %r12
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 32(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 40(%rbp)
  movdqu 16(%r9), %xmm5
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -80(%rcx), %xmm15
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm3, %xmm7, %xmm7
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vaesenc %xmm15, %xmm11, %xmm11
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 80(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -64(%rcx), %xmm15
  vpxor %xmm2, %xmm6, %xmm6
  vpclmulqdq $0, %xmm1, %xmm0, %xmm2
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $16, %xmm1, %xmm0, %xmm3
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 72(%r14), %r13
  vpxor %xmm5, %xmm7, %xmm7
  vpclmulqdq $1, %xmm1, %xmm0, %xmm5
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 64(%r14), %r12
  vpclmulqdq $17, %xmm1, %xmm0, %xmm1
  movdqu 96(%rbp), %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 48(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 56(%rbp)
  vpxor %xmm2, %xmm4, %xmm4
  movdqu 64(%r9), %xmm2
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -48(%rcx), %xmm15
  vpxor %xmm3, %xmm6, %xmm6
  vpclmulqdq $0, %xmm2, %xmm0, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm2, %xmm0, %xmm5
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 56(%r14), %r13
  vpxor %xmm1, %xmm7, %xmm7
  vpclmulqdq $1, %xmm2, %xmm0, %xmm1
  vpxor 112(%rbp), %xmm8, %xmm8
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 48(%r14), %r12
  vpclmulqdq $17, %xmm2, %xmm0, %xmm2
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 64(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 72(%rbp)
  vpxor %xmm3, %xmm4, %xmm4
  movdqu 80(%r9), %xmm3
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu -32(%rcx), %xmm15
  vpxor %xmm5, %xmm6, %xmm6
  vpclmulqdq $16, %xmm3, %xmm8, %xmm5
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm1, %xmm6, %xmm6
  vpclmulqdq $1, %xmm3, %xmm8, %xmm1
  vaesenc %xmm15, %xmm10, %xmm10
  movbeq 40(%r14), %r13
  vpxor %xmm2, %xmm7, %xmm7
  vpclmulqdq $0, %xmm3, %xmm8, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 32(%r14), %r12
  vpclmulqdq $17, %xmm3, %xmm8, %xmm8
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r13, 80(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  movq %r12, 88(%rbp)
  vpxor %xmm5, %xmm6, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor %xmm1, %xmm6, %xmm6
  movdqu -16(%rcx), %xmm15
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm2, %xmm4, %xmm4
  pxor %xmm3, %xmm3
  mov $13979173243358019584, %r11
  pinsrq $1, %r11, %xmm3
  vaesenc %xmm15, %xmm9, %xmm9
  vpxor %xmm8, %xmm7, %xmm7
  vaesenc %xmm15, %xmm10, %xmm10
  vpxor %xmm5, %xmm4, %xmm4
  movbeq 24(%r14), %r13
  vaesenc %xmm15, %xmm11, %xmm11
  movbeq 16(%r14), %r12
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  movq %r13, 96(%rbp)
  vaesenc %xmm15, %xmm12, %xmm12
  movq %r12, 104(%rbp)
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  movdqu 0(%rcx), %xmm1
  vaesenc %xmm1, %xmm9, %xmm9
  movdqu 16(%rcx), %xmm15
  vaesenc %xmm1, %xmm10, %xmm10
  vpsrldq $8, %xmm6, %xmm6
  vaesenc %xmm1, %xmm11, %xmm11
  vpxor %xmm6, %xmm7, %xmm7
  vaesenc %xmm1, %xmm12, %xmm12
  vpxor %xmm0, %xmm4, %xmm4
  movbeq 8(%r14), %r13
  vaesenc %xmm1, %xmm13, %xmm13
  movbeq 0(%r14), %r12
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 32(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  vaesenc %xmm1, %xmm9, %xmm9
  vaesenc %xmm1, %xmm10, %xmm10
  vaesenc %xmm1, %xmm11, %xmm11
  vaesenc %xmm1, %xmm12, %xmm12
  vaesenc %xmm1, %xmm13, %xmm13
  movdqu 48(%rcx), %xmm15
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 64(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  vaesenc %xmm15, %xmm10, %xmm10
  vaesenc %xmm15, %xmm11, %xmm11
  vaesenc %xmm15, %xmm12, %xmm12
  vaesenc %xmm15, %xmm13, %xmm13
  vaesenc %xmm15, %xmm14, %xmm14
  vaesenc %xmm1, %xmm9, %xmm9
  vaesenc %xmm1, %xmm10, %xmm10
  vaesenc %xmm1, %xmm11, %xmm11
  vaesenc %xmm1, %xmm12, %xmm12
  vaesenc %xmm1, %xmm13, %xmm13
  movdqu 80(%rcx), %xmm15
  vaesenc %xmm1, %xmm14, %xmm14
  movdqu 96(%rcx), %xmm1
  vaesenc %xmm15, %xmm9, %xmm9
  movdqu %xmm7, 16(%rbp)
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vaesenc %xmm15, %xmm10, %xmm10
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor 0(%rdi), %xmm1, %xmm2
  vaesenc %xmm15, %xmm11, %xmm11
  vpxor 16(%rdi), %xmm1, %xmm0
  vaesenc %xmm15, %xmm12, %xmm12
  vpxor 32(%rdi), %xmm1, %xmm5
  vaesenc %xmm15, %xmm13, %xmm13
  vpxor 48(%rdi), %xmm1, %xmm6
  vaesenc %xmm15, %xmm14, %xmm14
  vpxor 64(%rdi), %xmm1, %xmm7
  vpxor 80(%rdi), %xmm1, %xmm3
  movdqu 128(%rbp), %xmm1
  vaesenclast %xmm2, %xmm9, %xmm9
  pxor %xmm2, %xmm2
  mov $72057594037927936, %r11
  pinsrq $1, %r11, %xmm2
  vaesenclast %xmm0, %xmm10, %xmm10
  vpaddd %xmm2, %xmm1, %xmm0
  movq %r13, 112(%rbp)
  lea 96(%rdi), %rdi
  vaesenclast %xmm5, %xmm11, %xmm11
  vpaddd %xmm2, %xmm0, %xmm5
  movq %r12, 120(%rbp)
  lea 96(%rsi), %rsi
  movdqu -128(%rcx), %xmm15
  vaesenclast %xmm6, %xmm12, %xmm12
  vpaddd %xmm2, %xmm5, %xmm6
  vaesenclast %xmm7, %xmm13, %xmm13
  vpaddd %xmm2, %xmm6, %xmm7
  vaesenclast %xmm3, %xmm14, %xmm14
  vpaddd %xmm2, %xmm7, %xmm3
  sub $6, %rdx
  cmp $6, %rdx
  jbe L216
  add $96, %r14
  jmp L217
L216:
L217:
  cmp $0, %rdx
  jbe L218
  movdqu %xmm9, -96(%rsi)
  vpxor %xmm15, %xmm1, %xmm9
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm0, %xmm10
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm5, %xmm11
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm6, %xmm12
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm7, %xmm13
  movdqu %xmm14, -16(%rsi)
  movdqu %xmm3, %xmm14
  movdqu 32(%rbp), %xmm7
  jmp L219
L218:
  vpxor 16(%rbp), %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
L219:
.balign 16
L213:
  cmp $0, %rdx
  ja L212
  movdqu %xmm1, 32(%rbp)
  movdqu %xmm9, -96(%rsi)
  movdqu %xmm10, -80(%rsi)
  movdqu %xmm11, -64(%rsi)
  movdqu %xmm12, -48(%rsi)
  movdqu %xmm13, -32(%rsi)
  movdqu %xmm14, -16(%rsi)
  sub $128, %rcx
L209:
  movdqu 32(%rbp), %xmm11
  mov %rcx, %r8
  mov 312(%rsp), %rax
  mov 320(%rsp), %rdi
  mov 328(%rsp), %rdx
  mov %rdx, %r14
  mov $579005069656919567, %r12
  pinsrq $0, %r12, %xmm9
  mov $283686952306183, %r12
  pinsrq $1, %r12, %xmm9
  pshufb %xmm9, %xmm11
  mov %rdi, %rbx
  mov %rdx, %r12
  mov %rax, %rdi
  mov %rdi, %r11
  jmp L221
.balign 16
L220:
  add $80, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 80(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  add $96, %r11
  sub $6, %rdx
.balign 16
L221:
  cmp $6, %rdx
  jae L220
  cmp $0, %rdx
  jbe L222
  mov %rdx, %r10
  sub $1, %r10
  imul $16, %r10
  add %r10, %r11
  movdqu -32(%r9), %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  cmp $1, %rdx
  jne L224
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  jmp L225
L224:
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  movdqu %xmm1, %xmm4
  movdqu -16(%r9), %xmm1
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  movdqu %xmm1, %xmm5
  cmp $2, %rdx
  je L226
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 16(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $3, %rdx
  je L228
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 32(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  cmp $4, %rdx
  je L230
  sub $16, %r11
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu 0(%r11), %xmm0
  pshufb %xmm9, %xmm0
  vpxor %xmm1, %xmm4, %xmm4
  movdqu 64(%r9), %xmm1
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
  movdqu %xmm1, %xmm5
  jmp L231
L230:
L231:
  jmp L229
L228:
L229:
  jmp L227
L226:
L227:
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  vpxor %xmm1, %xmm4, %xmm4
  vpxor %xmm2, %xmm6, %xmm6
  vpxor %xmm3, %xmm6, %xmm6
  vpxor %xmm5, %xmm7, %xmm7
L225:
  pxor %xmm3, %xmm3
  mov $3254779904, %r10
  pinsrd $3, %r10d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  jmp L223
L222:
L223:
  mov %rbx, %rdi
  mov %r12, %rdx
  pxor %xmm10, %xmm10
  mov $1, %rbx
  pinsrd $0, %ebx, %xmm10
  mov %rax, %r11
  mov %rdi, %r10
  mov $0, %rbx
  jmp L233
.balign 16
L232:
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  movdqu 0(%r11), %xmm2
  pxor %xmm0, %xmm2
  movdqu %xmm2, 0(%r10)
  add $1, %rbx
  add $16, %r11
  add $16, %r10
  paddd %xmm10, %xmm11
.balign 16
L233:
  cmp %rdx, %rbx
  jne L232
  add 304(%rsp), %r14
  imul $16, %r14
  mov 344(%rsp), %r13
  cmp %r14, %r13
  jbe L234
  mov 336(%rsp), %rax
  mov %r13, %r10
  and $15, %r10
  movdqu 0(%rax), %xmm0
  movdqu %xmm0, %xmm10
  cmp $8, %r10
  jae L236
  mov $0, %rcx
  pinsrq $1, %rcx, %xmm0
  mov %r10, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $0, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $0, %rcx, %xmm0
  jmp L237
L236:
  mov %r10, %rcx
  sub $8, %rcx
  shl $3, %rcx
  mov $1, %r11
  shl %cl, %r11
  sub $1, %r11
  pextrq $1, %xmm0, %rcx
  and %r11, %rcx
  pinsrq $1, %rcx, %xmm0
L237:
  pshufb %xmm9, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu %xmm11, %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pxor %xmm0, %xmm10
  movdqu %xmm10, 0(%rax)
  jmp L235
L234:
L235:
  mov %r15, %r11
  pxor %xmm0, %xmm0
  mov %r11, %rax
  imul $8, %rax
  pinsrq $1, %rax, %xmm0
  mov %r13, %rax
  imul $8, %rax
  pinsrq $0, %rax, %xmm0
  movdqu -32(%r9), %xmm5
  vpxor %xmm0, %xmm8, %xmm0
  vpclmulqdq $0, %xmm5, %xmm0, %xmm1
  vpclmulqdq $16, %xmm5, %xmm0, %xmm2
  vpclmulqdq $1, %xmm5, %xmm0, %xmm3
  vpclmulqdq $17, %xmm5, %xmm0, %xmm5
  movdqu %xmm1, %xmm4
  vpxor %xmm3, %xmm2, %xmm6
  movdqu %xmm5, %xmm7
  pxor %xmm3, %xmm3
  mov $3254779904, %r11
  pinsrd $3, %r11d, %xmm3
  vpslldq $8, %xmm6, %xmm5
  vpxor %xmm5, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm0
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpsrldq $8, %xmm6, %xmm6
  vpxor %xmm6, %xmm7, %xmm7
  vpxor %xmm0, %xmm4, %xmm4
  vpalignr $8, %xmm4, %xmm4, %xmm8
  vpclmulqdq $16, %xmm3, %xmm4, %xmm4
  vpxor %xmm7, %xmm8, %xmm8
  vpxor %xmm4, %xmm8, %xmm8
  movdqu 0(%rbp), %xmm0
  pshufb %xmm9, %xmm0
  movdqu 0(%r8), %xmm2
  pxor %xmm2, %xmm0
  movdqu 16(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 32(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 48(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 64(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 80(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 96(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 112(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 128(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 144(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 160(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 176(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 192(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 208(%r8), %xmm2
  aesenc %xmm2, %xmm0
  movdqu 224(%r8), %xmm2
  aesenclast %xmm2, %xmm0
  pxor %xmm2, %xmm2
  pshufb %xmm9, %xmm8
  pxor %xmm0, %xmm8
  mov 360(%rsp), %r15
  movdqu 0(%r15), %xmm0
  pcmpeqd %xmm8, %xmm0
  pextrq $0, %xmm0, %rdx
  sub $18446744073709551615, %rdx
  mov $0, %rax
  adc $0, %rax
  pextrq $1, %xmm0, %rdx
  sub $18446744073709551615, %rdx
  mov $0, %rdx
  adc $0, %rdx
  add %rdx, %rax
  mov %rax, %rcx
  pop %rax
  pinsrq $1, %rax, %xmm6
  pop %rax
  pinsrq $0, %rax, %xmm6
  pop %rax
  pinsrq $1, %rax, %xmm7
  pop %rax
  pinsrq $0, %rax, %xmm7
  pop %rax
  pinsrq $1, %rax, %xmm8
  pop %rax
  pinsrq $0, %rax, %xmm8
  pop %rax
  pinsrq $1, %rax, %xmm9
  pop %rax
  pinsrq $0, %rax, %xmm9
  pop %rax
  pinsrq $1, %rax, %xmm10
  pop %rax
  pinsrq $0, %rax, %xmm10
  pop %rax
  pinsrq $1, %rax, %xmm11
  pop %rax
  pinsrq $0, %rax, %xmm11
  pop %rax
  pinsrq $1, %rax, %xmm12
  pop %rax
  pinsrq $0, %rax, %xmm12
  pop %rax
  pinsrq $1, %rax, %xmm13
  pop %rax
  pinsrq $0, %rax, %xmm13
  pop %rax
  pinsrq $1, %rax, %xmm14
  pop %rax
  pinsrq $0, %rax, %xmm14
  pop %rax
  pinsrq $1, %rax, %xmm15
  pop %rax
  pinsrq $0, %rax, %xmm15
  pop %rbx
  pop %rbp
  pop %rdi
  pop %rsi
  pop %r12
  pop %r13
  pop %r14
  pop %r15
  mov %rcx, %rax
  ret


