llvm/bolt/test/X86/cfi-expr-rewrite.s

## Check that llvm-bolt is able to parse DWARF expressions in CFI instructions,
## store them in memory and correctly write them back to the output binary.

# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o
# RUN: %clang %cflags %t.o -o %t.exe
# RUN: llvm-bolt %t.exe -o %t && llvm-dwarfdump --eh-frame %t | FileCheck %s
#
# CHECK:       DW_CFA_advance_loc: 5
# CHECK-NEXT:  DW_CFA_def_cfa: R10 +0
# CHECK-NEXT:  DW_CFA_advance_loc: 9
# CHECK-NEXT:  DW_CFA_expression: RBP DW_OP_breg6 RBP+0
# CHECK-NEXT:  DW_CFA_advance_loc: 5
# CHECK-NEXT:  DW_CFA_def_cfa_expression: DW_OP_breg6 RBP-8, DW_OP_deref
# CHECK-NEXT:  DW_CFA_advance_loc2: 3130
# CHECK-NEXT:  DW_CFA_def_cfa: R10 +0
# CHECK-NEXT:  DW_CFA_advance_loc: 5
# CHECK-NEXT:  DW_CFA_def_cfa: RSP +8

	.text
  .globl main
  .type main, %function
main:
# FDATA: 0 [unknown] 0 1 main 0 0 0
	.cfi_startproc
.LBB06:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register %rbp
	callq	blake2b_compress_avx2
	movl	$0x0, %eax
	popq	%rbp
	.cfi_def_cfa %rsp, 8
	retq

	.cfi_endproc
.size main, .-main

  .globl blake2b_compress_avx2
  .type blake2b_compress_avx2, %function
blake2b_compress_avx2:
# FDATA: 0 [unknown] 0 1 blake2b_compress_avx2 0 0 0
	.cfi_startproc
.LBB07:
	leaq	0x8(%rsp), %r10
	.cfi_def_cfa %r10, 0
	andq	$-0x20, %rsp
	pushq	-0x8(%r10)
	pushq	%rbp
	.cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
	movq	%rsp, %rbp
	pushq	%r10
	.cfi_escape 0x0f, 0x03, 0x76, 0x78, 0x06 #
	subq	$0x170, %rsp
	vbroadcasti128	(%rsi), %ymm10
	vbroadcasti128	0x10(%rsi), %ymm8
	vbroadcasti128	0x30(%rsi), %ymm7
	vbroadcasti128	0x70(%rsi), %ymm4
	vpunpcklqdq	%ymm8, %ymm10, %ymm0
	vbroadcasti128	0x20(%rsi), %ymm11
	vmovdqa	%ymm7, -0x30(%rbp)
	vpunpcklqdq	-0x30(%rbp), %ymm11, %ymm1
	vmovdqa	%ymm4, %ymm15
	vpblendd	$0xf0, %ymm1, %ymm0, %ymm4
	vpaddq	(%rdi), %ymm4, %ymm13
	vpaddq	0x20(%rdi), %ymm13, %ymm13
	vmovdqa	%ymm4, -0x190(%rbp)
	vbroadcasti128	0x60(%rsi), %ymm7
	vbroadcasti128	0x50(%rsi), %ymm6
	vbroadcasti128	0x40(%rsi), %ymm9
	vpunpcklqdq	%ymm15, %ymm7, %ymm14
	vmovq	0x50(%rdi), %xmm5
	vpinsrq	$0x1, 0x58(%rdi), %xmm5, %xmm1
	vmovq	0x40(%rdi), %xmm5
	vpinsrq	$0x1, 0x48(%rdi), %xmm5, %xmm0
	vinserti128	$0x1, %xmm1, %ymm0, %ymm1
	vpunpckhqdq	%ymm8, %ymm10, %ymm0
	vpxor	"blake2b_IV/1"+32(%rip), %ymm1, %ymm1
	vpunpckhqdq	-0x30(%rbp), %ymm11, %ymm4
	vpblendd	$0xf0, %ymm4, %ymm0, %ymm0
	vmovdqa	DATAat0x401380(%rip), %ymm5
	vmovdqa	%ymm0, -0xb0(%rbp)
	vpxor	%ymm13, %ymm1, %ymm1
	vpaddq	-0xb0(%rbp), %ymm13, %ymm13
	vpshufd	$0xb1, %ymm1, %ymm1
	vmovdqa	DATAat0x4013a0(%rip), %ymm4
	vpaddq	"blake2b_IV/1"(%rip), %ymm1, %ymm3
	vpxor	0x20(%rdi), %ymm3, %ymm2
	vpshufb	%ymm5, %ymm2, %ymm2
	vpaddq	%ymm2, %ymm13, %ymm13
	vpxor	%ymm1, %ymm13, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm2, %ymm3, %ymm2
	vpsrlq	$0x3f, %ymm2, %ymm12
	vpaddq	%ymm2, %ymm2, %ymm2
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm2, %ymm2
	vpermq	$0x39, %ymm2, %ymm0
	vpunpcklqdq	%ymm6, %ymm9, %ymm2
	vpunpckhqdq	%ymm15, %ymm7, %ymm12
	vpblendd	$0xf0, %ymm14, %ymm2, %ymm2
	vmovdqa	%ymm2, -0xd0(%rbp)
	vpaddq	-0xd0(%rbp), %ymm13, %ymm13
	vpunpckhqdq	%ymm6, %ymm9, %ymm2
	vpblendd	$0xf0, %ymm12, %ymm2, %ymm2
	vmovdqa	%ymm2, -0xf0(%rbp)
	vmovdqa	%ymm15, %ymm12
	vpaddq	%ymm0, %ymm13, %ymm13
	vmovdqa	%ymm12, -0x50(%rbp)
	vpxor	%ymm13, %ymm1, %ymm1
	vpaddq	-0xf0(%rbp), %ymm13, %ymm13
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm13, %ymm13
	vpxor	%ymm1, %ymm13, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpunpcklqdq	%ymm11, %ymm15, %ymm2
	vmovdqa	%ymm2, %ymm15
	vpunpckhqdq	%ymm7, %ymm9, %ymm2
	vpblendd	$0xf0, %ymm2, %ymm15, %ymm2
	vmovdqa	%ymm15, -0x1b0(%rbp)
	vpermq	$0x93, %ymm0, %ymm0
	vmovdqa	%ymm2, -0x110(%rbp)
	vpunpcklqdq	%ymm9, %ymm6, %ymm2
	vpaddq	-0x110(%rbp), %ymm13, %ymm13
	vmovdqa	%ymm2, %ymm15
	vmovdqa	-0x30(%rbp), %ymm2
	vpalignr	$0x8, -0x50(%rbp), %ymm2, %ymm2
	vmovdqa	%ymm15, -0x1d0(%rbp)
	vpaddq	%ymm0, %ymm13, %ymm13
	vpblendd	$0xf0, %ymm2, %ymm15, %ymm12
	vpxor	%ymm13, %ymm1, %ymm1
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vmovdqa	%ymm12, -0x130(%rbp)
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	-0x130(%rbp), %ymm13, %ymm13
	vmovdqa	-0x30(%rbp), %ymm15
	vpunpckhqdq	%ymm11, %ymm6, %ymm12
	vpaddq	%ymm0, %ymm13, %ymm13
	vpxor	%ymm1, %ymm13, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpshufd	$0x4e, %ymm10, %ymm2
	vpblendd	$0xf0, %ymm12, %ymm2, %ymm12
	vpermq	$0x39, %ymm0, %ymm0
	vmovdqa	%ymm12, -0x150(%rbp)
	vpunpckhqdq	%ymm8, %ymm15, %ymm12
	vpunpcklqdq	%ymm8, %ymm7, %ymm2
	vpaddq	-0x150(%rbp), %ymm13, %ymm13
	vmovdqa	%ymm12, -0x70(%rbp)
	vmovdqa	-0x50(%rbp), %ymm15
	vpblendd	$0xf0, -0x70(%rbp), %ymm2, %ymm2
	vpaddq	%ymm0, %ymm13, %ymm13
	vmovdqa	%ymm2, -0x170(%rbp)
	vpxor	%ymm13, %ymm1, %ymm1
	vpunpckhqdq	%ymm15, %ymm11, %ymm12
	vpaddq	-0x170(%rbp), %ymm13, %ymm13
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vmovdqa	%ymm12, -0x90(%rbp)
	vpunpcklqdq	%ymm10, %ymm9, %ymm12
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm13, %ymm13
	vpxor	%ymm1, %ymm13, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpalignr	$0x8, %ymm6, %ymm7, %ymm2
	vpermq	$0x93, %ymm0, %ymm0
	vpblendd	$0xf0, -0x90(%rbp), %ymm2, %ymm2
	vpaddq	%ymm2, %ymm13, %ymm2
	vpblendd	$0x33, %ymm8, %ymm7, %ymm13
	vpaddq	%ymm0, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vmovdqa	-0x30(%rbp), %ymm13
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm12
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm12, %ymm12
	vpunpckhqdq	%ymm9, %ymm13, %ymm13
	vpxor	%ymm1, %ymm12, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpblendd	$0x33, %ymm6, %ymm8, %ymm2
	vpermq	$0x39, %ymm0, %ymm0
	vpblendd	$0xf0, %ymm13, %ymm2, %ymm13
	vpunpcklqdq	-0x30(%rbp), %ymm15, %ymm2
	vmovdqa	-0x70(%rbp), %ymm15
	vpaddq	%ymm13, %ymm12, %ymm13
	vpalignr	$0x8, %ymm10, %ymm11, %ymm12
	vpaddq	%ymm0, %ymm13, %ymm13
	vpblendd	$0xf0, %ymm12, %ymm2, %ymm2
	vpxor	%ymm13, %ymm1, %ymm1
	vpaddq	%ymm2, %ymm13, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpunpckhqdq	%ymm10, %ymm9, %ymm13
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpblendd	$0xf0, %ymm14, %ymm13, %ymm13
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x39, %ymm1, %ymm1
	vpor	%ymm12, %ymm0, %ymm0
	vpunpckhqdq	%ymm6, %ymm7, %ymm12
	vpermq	$0x93, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
	vmovdqa	-0x50(%rbp), %ymm15
	vpaddq	%ymm12, %ymm2, %ymm12
	vpaddq	%ymm0, %ymm12, %ymm12
	vpblendd	$0x33, %ymm11, %ymm15, %ymm14
	vpunpcklqdq	%ymm6, %ymm8, %ymm15
	vpxor	%ymm12, %ymm1, %ymm1
	vpaddq	%ymm13, %ymm12, %ymm13
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm13, %ymm13
	vpxor	%ymm1, %ymm13, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpblendd	$0x33, %ymm8, %ymm11, %ymm2
	vpermq	$0x39, %ymm0, %ymm12
	vmovdqa	-0x30(%rbp), %ymm0
	vpblendd	$0xf0, %ymm14, %ymm2, %ymm2
	vpaddq	%ymm2, %ymm13, %ymm2
	vpunpcklqdq	%ymm6, %ymm0, %ymm13
	vmovdqa	%ymm13, %ymm0
	vpunpcklqdq	%ymm9, %ymm10, %ymm13
	vmovdqa	%ymm0, -0x1f0(%rbp)
	vpaddq	%ymm12, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm13, %ymm0, %ymm0
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm0, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm12, %ymm3, %ymm12
	vpshufb	%ymm5, %ymm12, %ymm12
	vpaddq	%ymm12, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm12, %ymm3, %ymm12
	vpsrlq	$0x3f, %ymm12, %ymm0
	vpaddq	%ymm12, %ymm12, %ymm12
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm0, %ymm12, %ymm12
	vpermq	$0x93, %ymm12, %ymm0
	vpunpckhqdq	%ymm11, %ymm9, %ymm12
	vpblendd	$0xf0, %ymm15, %ymm12, %ymm12
	vmovdqa	-0x30(%rbp), %ymm15
	vpaddq	%ymm12, %ymm2, %ymm2
	vpaddq	%ymm0, %ymm2, %ymm2
	vpblendd	$0x33, %ymm10, %ymm15, %ymm12
	vpxor	%ymm2, %ymm1, %ymm1
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpblendd	$0xf0, %ymm14, %ymm12, %ymm14
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vmovdqa	-0x50(%rbp), %ymm15
	vpaddq	%ymm14, %ymm2, %ymm2
	vpblendd	$0x33, -0x30(%rbp), %ymm8, %ymm14
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpblendd	$0x33, %ymm15, %ymm6, %ymm12
	vpermq	$0x39, %ymm0, %ymm0
	vpblendd	$0xf0, %ymm14, %ymm12, %ymm12
	vpblendd	$0x33, %ymm9, %ymm7, %ymm14
	vpaddq	%ymm12, %ymm2, %ymm2
	vpalignr	$0x8, %ymm10, %ymm7, %ymm12
	vpaddq	%ymm0, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm14, %ymm12, %ymm12
	vmovdqa	-0x30(%rbp), %ymm14
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpunpcklqdq	-0x30(%rbp), %ymm8, %ymm12
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm13
	vpermq	$0x93, %ymm0, %ymm0
	vpaddq	%ymm13, %ymm2, %ymm2
	vpunpcklqdq	%ymm6, %ymm7, %ymm12
	vpunpckhqdq	%ymm8, %ymm6, %ymm13
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vpaddq	%ymm0, %ymm2, %ymm2
	vpunpckhqdq	%ymm10, %ymm15, %ymm13
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpblendd	$0x33, %ymm11, %ymm14, %ymm12
	vmovdqa	%ymm15, %ymm14
	vpermq	$0x39, %ymm0, %ymm0
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vpblendd	$0x33, %ymm14, %ymm9, %ymm13
	vmovdqa	-0x90(%rbp), %ymm15
	vpaddq	%ymm12, %ymm2, %ymm2
	vpunpckhqdq	%ymm11, %ymm7, %ymm12
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vpshufd	$0x4e, %ymm9, %ymm13
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpblendd	$0x33, %ymm7, %ymm10, %ymm12
	vpermq	$0x93, %ymm0, %ymm0
	vpblendd	$0xf0, -0x1b0(%rbp), %ymm12, %ymm12
	vpaddq	%ymm12, %ymm2, %ymm2
	vpalignr	$0x8, %ymm7, %ymm6, %ymm12
	vpaddq	%ymm0, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
	vmovdqa	-0x70(%rbp), %ymm15
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpunpcklqdq	-0x30(%rbp), %ymm10, %ymm12
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vpermq	$0x39, %ymm0, %ymm0
	vpaddq	%ymm12, %ymm2, %ymm2
	vpblendd	$0x33, %ymm8, %ymm6, %ymm12
	vpblendd	$0x33, %ymm7, %ymm8, %ymm13
	vpaddq	%ymm0, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
	vmovdqa	-0x90(%rbp), %ymm15
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpunpckhqdq	-0x30(%rbp), %ymm7, %ymm12
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vmovdqa	%ymm14, %ymm13
	vpaddq	%ymm12, %ymm2, %ymm2
	vpalignr	$0x8, %ymm6, %ymm14, %ymm14
	vpunpckhqdq	%ymm9, %ymm10, %ymm12
	vpermq	$0x93, %ymm0, %ymm0
	vpblendd	$0xf0, %ymm12, %ymm14, %ymm12
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vpunpcklqdq	%ymm8, %ymm9, %ymm12
	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
	vpermq	$0x39, %ymm0, %ymm0
	vpaddq	%ymm12, %ymm2, %ymm2
	vpunpcklqdq	%ymm11, %ymm10, %ymm12
	vmovdqa	%ymm13, %ymm15
	vpblendd	$0xf0, -0x1f0(%rbp), %ymm12, %ymm12
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	%ymm12, %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm12
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm12, %ymm0, %ymm0
	vmovdqa	-0x30(%rbp), %ymm12
	vpermq	$0x93, %ymm0, %ymm0
	vpunpcklqdq	%ymm13, %ymm12, %ymm12
	vpalignr	$0x8, %ymm6, %ymm10, %ymm13
	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
	vpunpckhqdq	%ymm9, %ymm15, %ymm13
	vpalignr	$0x8, %ymm8, %ymm9, %ymm9
	vpaddq	%ymm12, %ymm2, %ymm12
	vpalignr	$0x8, %ymm10, %ymm6, %ymm6
	vpblendd	$0xf0, %ymm9, %ymm13, %ymm9
	vpaddq	%ymm0, %ymm12, %ymm12
	vpblendd	$0xf0, %ymm6, %ymm7, %ymm6
	vpxor	%ymm12, %ymm1, %ymm1
	vpaddq	%ymm9, %ymm12, %ymm12
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm0, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm12, %ymm12
	vpxor	%ymm1, %ymm12, %ymm1
	vpaddq	%ymm6, %ymm12, %ymm12
	vpshufb	%ymm4, %ymm1, %ymm1
	vmovdqa	-0x30(%rbp), %ymm6
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x93, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm0
	vpblendd	$0x33, %ymm8, %ymm6, %ymm2
	vpermq	$0x39, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm12, %ymm12
	vpblendd	$0xf0, %ymm11, %ymm2, %ymm2
	vpxor	%ymm12, %ymm1, %ymm1
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpaddq	%ymm2, %ymm12, %ymm12
	vpxor	%ymm3, %ymm0, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vmovdqa	-0x30(%rbp), %ymm6
	vpaddq	%ymm0, %ymm12, %ymm12
	vpxor	%ymm1, %ymm12, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpermq	$0x39, %ymm1, %ymm1
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x4e, %ymm3, %ymm3
	vpor	%ymm2, %ymm0, %ymm2
	vpunpckhqdq	%ymm10, %ymm6, %ymm0
	vmovdqa	-0x1d0(%rbp), %ymm6
	vpermq	$0x93, %ymm2, %ymm2
	vpblendd	$0xf0, %ymm0, %ymm6, %ymm0
	vpaddq	%ymm0, %ymm12, %ymm12
	vpunpcklqdq	%ymm11, %ymm8, %ymm0
	vpblendd	$0x33, -0x30(%rbp), %ymm11, %ymm11
	vpunpckhqdq	%ymm7, %ymm8, %ymm8
	vpaddq	%ymm2, %ymm12, %ymm12
	vpblendd	$0xf0, %ymm11, %ymm0, %ymm11
	vpblendd	$0xf0, %ymm8, %ymm13, %ymm8
	vpunpcklqdq	%ymm10, %ymm7, %ymm7
	vpxor	%ymm12, %ymm1, %ymm1
	vpaddq	%ymm11, %ymm12, %ymm12
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm2, %ymm2
	vpshufb	%ymm5, %ymm2, %ymm2
	vpaddq	%ymm2, %ymm12, %ymm12
	vpblendd	$0xf0, %ymm7, %ymm14, %ymm7
	vpxor	%ymm1, %ymm12, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpaddq	%ymm8, %ymm12, %ymm8
	vpxor	%ymm2, %ymm3, %ymm2
	vpsrlq	$0x3f, %ymm2, %ymm0
	vpaddq	%ymm2, %ymm2, %ymm2
	vpermq	$0x93, %ymm1, %ymm1
	vpor	%ymm0, %ymm2, %ymm2
	vpermq	$0x39, %ymm2, %ymm2
	vpaddq	%ymm2, %ymm8, %ymm8
	vpermq	$0x4e, %ymm3, %ymm3
	vpxor	%ymm8, %ymm1, %ymm1
	vpaddq	%ymm7, %ymm8, %ymm8
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm2, %ymm2
	vpshufb	%ymm5, %ymm2, %ymm2
	vpaddq	%ymm2, %ymm8, %ymm8
	vpxor	%ymm1, %ymm8, %ymm1
	vpaddq	-0x190(%rbp), %ymm8, %ymm8
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm2, %ymm3, %ymm2
	vpsrlq	$0x3f, %ymm2, %ymm0
	vpaddq	%ymm2, %ymm2, %ymm2
	vpermq	$0x39, %ymm1, %ymm1
	vpor	%ymm0, %ymm2, %ymm2
	vpermq	$0x93, %ymm2, %ymm0
	vpaddq	%ymm0, %ymm8, %ymm8
	vpermq	$0x4e, %ymm3, %ymm3
	vpxor	%ymm8, %ymm1, %ymm1
	vpaddq	-0xb0(%rbp), %ymm8, %ymm8
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm0, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm8, %ymm8
	vpxor	%ymm1, %ymm8, %ymm1
	vpaddq	-0xd0(%rbp), %ymm8, %ymm8
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpaddq	%ymm0, %ymm0, %ymm6
	vpermq	$0x93, %ymm1, %ymm1
	vpermq	$0x4e, %ymm3, %ymm3
	vpsrlq	$0x3f, %ymm0, %ymm2
	vpor	%ymm2, %ymm6, %ymm6
	vpermq	$0x39, %ymm6, %ymm6
	vpaddq	%ymm6, %ymm8, %ymm2
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	-0xf0(%rbp), %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm6, %ymm6
	vpshufb	%ymm5, %ymm6, %ymm6
	vpaddq	%ymm6, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpaddq	-0x110(%rbp), %ymm2, %ymm2
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm6, %ymm3, %ymm6
	vpsrlq	$0x3f, %ymm6, %ymm0
	vpaddq	%ymm6, %ymm6, %ymm6
	vpermq	$0x39, %ymm1, %ymm1
	vpor	%ymm0, %ymm6, %ymm0
	vpermq	$0x93, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpermq	$0x4e, %ymm3, %ymm3
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	-0x130(%rbp), %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm0, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpaddq	-0x150(%rbp), %ymm2, %ymm2
	vpshufb	%ymm4, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm0, %ymm3, %ymm0
	vpsrlq	$0x3f, %ymm0, %ymm6
	vpaddq	%ymm0, %ymm0, %ymm0
	vpermq	$0x93, %ymm1, %ymm1
	vpor	%ymm6, %ymm0, %ymm0
	vpermq	$0x39, %ymm0, %ymm0
	vpaddq	%ymm0, %ymm2, %ymm2
	vpermq	$0x4e, %ymm3, %ymm3
	vpxor	%ymm2, %ymm1, %ymm1
	vpaddq	-0x170(%rbp), %ymm2, %ymm2
	vpshufd	$0xb1, %ymm1, %ymm1
	vpaddq	%ymm1, %ymm3, %ymm3
	vpxor	%ymm3, %ymm0, %ymm0
	vpshufb	%ymm5, %ymm0, %ymm5
	vpaddq	%ymm5, %ymm2, %ymm2
	vpxor	%ymm1, %ymm2, %ymm1
	vpshufb	%ymm4, %ymm1, %ymm4
	vpaddq	%ymm4, %ymm3, %ymm0
	vpermq	$0x39, %ymm4, %ymm4
	vpxor	%ymm5, %ymm0, %ymm5
	vpsrlq	$0x3f, %ymm5, %ymm1
	vpaddq	%ymm5, %ymm5, %ymm5
	vpermq	$0x4e, %ymm0, %ymm0
	vpor	%ymm1, %ymm5, %ymm5
	vpxor	(%rdi), %ymm0, %ymm0
	vpermq	$0x93, %ymm5, %ymm5
	vpxor	%ymm2, %ymm0, %ymm2
	vmovdqu	%ymm2, (%rdi)
	vpxor	0x20(%rdi), %ymm5, %ymm5
	vpxor	%ymm4, %ymm5, %ymm4
	vmovdqu	%ymm4, 0x20(%rdi)
	vzeroupper
	xorl	%eax, %eax
	addq	$0x170, %rsp
	popq	%r10
	.cfi_def_cfa %r10, 0
	popq	%rbp
	leaq	-0x8(%r10), %rsp
	.cfi_def_cfa %rsp, 8
	retq

	.cfi_endproc
.size blake2b_compress_avx2, .-blake2b_compress_avx2
.section .rodata
"blake2b_IV/1":
"DATAat0x4013a0":
"DATAat0x401380":