xref: /llvm-project/bolt/test/X86/cfi-expr-rewrite.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1## Check that llvm-bolt is able to parse DWARF expressions in CFI instructions,
2## store them in memory and correctly write them back to the output binary.
3
4# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o
5# RUN: %clang %cflags %t.o -o %t.exe
6# RUN: llvm-bolt %t.exe -o %t && llvm-dwarfdump --eh-frame %t | FileCheck %s
7#
8# CHECK:       DW_CFA_advance_loc: 5
9# CHECK-NEXT:  DW_CFA_def_cfa: R10 +0
10# CHECK-NEXT:  DW_CFA_advance_loc: 9
11# CHECK-NEXT:  DW_CFA_expression: RBP DW_OP_breg6 RBP+0
12# CHECK-NEXT:  DW_CFA_advance_loc: 5
13# CHECK-NEXT:  DW_CFA_def_cfa_expression: DW_OP_breg6 RBP-8, DW_OP_deref
14# CHECK-NEXT:  DW_CFA_advance_loc2: 3130
15# CHECK-NEXT:  DW_CFA_def_cfa: R10 +0
16# CHECK-NEXT:  DW_CFA_advance_loc: 5
17# CHECK-NEXT:  DW_CFA_def_cfa: RSP +8
18
19	.text
20  .globl main
21  .type main, %function
22main:
23# FDATA: 0 [unknown] 0 1 main 0 0 0
24	.cfi_startproc
25.LBB06:
26	pushq	%rbp
27	.cfi_def_cfa_offset 16
28	.cfi_offset %rbp, -16
29	movq	%rsp, %rbp
30	.cfi_def_cfa_register %rbp
31	callq	blake2b_compress_avx2
32	movl	$0x0, %eax
33	popq	%rbp
34	.cfi_def_cfa %rsp, 8
35	retq
36
37	.cfi_endproc
38.size main, .-main
39
40  .globl blake2b_compress_avx2
41  .type blake2b_compress_avx2, %function
42blake2b_compress_avx2:
43# FDATA: 0 [unknown] 0 1 blake2b_compress_avx2 0 0 0
44	.cfi_startproc
45.LBB07:
46	leaq	0x8(%rsp), %r10
47	.cfi_def_cfa %r10, 0
48	andq	$-0x20, %rsp
49	pushq	-0x8(%r10)
50	pushq	%rbp
51	.cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
52	movq	%rsp, %rbp
53	pushq	%r10
54	.cfi_escape 0x0f, 0x03, 0x76, 0x78, 0x06 #
55	subq	$0x170, %rsp
56	vbroadcasti128	(%rsi), %ymm10
57	vbroadcasti128	0x10(%rsi), %ymm8
58	vbroadcasti128	0x30(%rsi), %ymm7
59	vbroadcasti128	0x70(%rsi), %ymm4
60	vpunpcklqdq	%ymm8, %ymm10, %ymm0
61	vbroadcasti128	0x20(%rsi), %ymm11
62	vmovdqa	%ymm7, -0x30(%rbp)
63	vpunpcklqdq	-0x30(%rbp), %ymm11, %ymm1
64	vmovdqa	%ymm4, %ymm15
65	vpblendd	$0xf0, %ymm1, %ymm0, %ymm4
66	vpaddq	(%rdi), %ymm4, %ymm13
67	vpaddq	0x20(%rdi), %ymm13, %ymm13
68	vmovdqa	%ymm4, -0x190(%rbp)
69	vbroadcasti128	0x60(%rsi), %ymm7
70	vbroadcasti128	0x50(%rsi), %ymm6
71	vbroadcasti128	0x40(%rsi), %ymm9
72	vpunpcklqdq	%ymm15, %ymm7, %ymm14
73	vmovq	0x50(%rdi), %xmm5
74	vpinsrq	$0x1, 0x58(%rdi), %xmm5, %xmm1
75	vmovq	0x40(%rdi), %xmm5
76	vpinsrq	$0x1, 0x48(%rdi), %xmm5, %xmm0
77	vinserti128	$0x1, %xmm1, %ymm0, %ymm1
78	vpunpckhqdq	%ymm8, %ymm10, %ymm0
79	vpxor	"blake2b_IV/1"+32(%rip), %ymm1, %ymm1
80	vpunpckhqdq	-0x30(%rbp), %ymm11, %ymm4
81	vpblendd	$0xf0, %ymm4, %ymm0, %ymm0
82	vmovdqa	DATAat0x401380(%rip), %ymm5
83	vmovdqa	%ymm0, -0xb0(%rbp)
84	vpxor	%ymm13, %ymm1, %ymm1
85	vpaddq	-0xb0(%rbp), %ymm13, %ymm13
86	vpshufd	$0xb1, %ymm1, %ymm1
87	vmovdqa	DATAat0x4013a0(%rip), %ymm4
88	vpaddq	"blake2b_IV/1"(%rip), %ymm1, %ymm3
89	vpxor	0x20(%rdi), %ymm3, %ymm2
90	vpshufb	%ymm5, %ymm2, %ymm2
91	vpaddq	%ymm2, %ymm13, %ymm13
92	vpxor	%ymm1, %ymm13, %ymm1
93	vpshufb	%ymm4, %ymm1, %ymm1
94	vpaddq	%ymm1, %ymm3, %ymm3
95	vpermq	$0x93, %ymm1, %ymm1
96	vpxor	%ymm2, %ymm3, %ymm2
97	vpsrlq	$0x3f, %ymm2, %ymm12
98	vpaddq	%ymm2, %ymm2, %ymm2
99	vpermq	$0x4e, %ymm3, %ymm3
100	vpor	%ymm12, %ymm2, %ymm2
101	vpermq	$0x39, %ymm2, %ymm0
102	vpunpcklqdq	%ymm6, %ymm9, %ymm2
103	vpunpckhqdq	%ymm15, %ymm7, %ymm12
104	vpblendd	$0xf0, %ymm14, %ymm2, %ymm2
105	vmovdqa	%ymm2, -0xd0(%rbp)
106	vpaddq	-0xd0(%rbp), %ymm13, %ymm13
107	vpunpckhqdq	%ymm6, %ymm9, %ymm2
108	vpblendd	$0xf0, %ymm12, %ymm2, %ymm2
109	vmovdqa	%ymm2, -0xf0(%rbp)
110	vmovdqa	%ymm15, %ymm12
111	vpaddq	%ymm0, %ymm13, %ymm13
112	vmovdqa	%ymm12, -0x50(%rbp)
113	vpxor	%ymm13, %ymm1, %ymm1
114	vpaddq	-0xf0(%rbp), %ymm13, %ymm13
115	vpshufd	$0xb1, %ymm1, %ymm1
116	vpaddq	%ymm1, %ymm3, %ymm3
117	vpxor	%ymm0, %ymm3, %ymm0
118	vpshufb	%ymm5, %ymm0, %ymm0
119	vpaddq	%ymm0, %ymm13, %ymm13
120	vpxor	%ymm1, %ymm13, %ymm1
121	vpshufb	%ymm4, %ymm1, %ymm1
122	vpaddq	%ymm1, %ymm3, %ymm3
123	vpermq	$0x39, %ymm1, %ymm1
124	vpxor	%ymm0, %ymm3, %ymm0
125	vpsrlq	$0x3f, %ymm0, %ymm2
126	vpaddq	%ymm0, %ymm0, %ymm0
127	vpermq	$0x4e, %ymm3, %ymm3
128	vpor	%ymm2, %ymm0, %ymm0
129	vpunpcklqdq	%ymm11, %ymm15, %ymm2
130	vmovdqa	%ymm2, %ymm15
131	vpunpckhqdq	%ymm7, %ymm9, %ymm2
132	vpblendd	$0xf0, %ymm2, %ymm15, %ymm2
133	vmovdqa	%ymm15, -0x1b0(%rbp)
134	vpermq	$0x93, %ymm0, %ymm0
135	vmovdqa	%ymm2, -0x110(%rbp)
136	vpunpcklqdq	%ymm9, %ymm6, %ymm2
137	vpaddq	-0x110(%rbp), %ymm13, %ymm13
138	vmovdqa	%ymm2, %ymm15
139	vmovdqa	-0x30(%rbp), %ymm2
140	vpalignr	$0x8, -0x50(%rbp), %ymm2, %ymm2
141	vmovdqa	%ymm15, -0x1d0(%rbp)
142	vpaddq	%ymm0, %ymm13, %ymm13
143	vpblendd	$0xf0, %ymm2, %ymm15, %ymm12
144	vpxor	%ymm13, %ymm1, %ymm1
145	vpshufd	$0xb1, %ymm1, %ymm1
146	vpaddq	%ymm1, %ymm3, %ymm3
147	vmovdqa	%ymm12, -0x130(%rbp)
148	vpxor	%ymm0, %ymm3, %ymm0
149	vpshufb	%ymm5, %ymm0, %ymm0
150	vpaddq	-0x130(%rbp), %ymm13, %ymm13
151	vmovdqa	-0x30(%rbp), %ymm15
152	vpunpckhqdq	%ymm11, %ymm6, %ymm12
153	vpaddq	%ymm0, %ymm13, %ymm13
154	vpxor	%ymm1, %ymm13, %ymm1
155	vpshufb	%ymm4, %ymm1, %ymm1
156	vpaddq	%ymm1, %ymm3, %ymm3
157	vpermq	$0x93, %ymm1, %ymm1
158	vpxor	%ymm0, %ymm3, %ymm0
159	vpsrlq	$0x3f, %ymm0, %ymm2
160	vpaddq	%ymm0, %ymm0, %ymm0
161	vpermq	$0x4e, %ymm3, %ymm3
162	vpor	%ymm2, %ymm0, %ymm0
163	vpshufd	$0x4e, %ymm10, %ymm2
164	vpblendd	$0xf0, %ymm12, %ymm2, %ymm12
165	vpermq	$0x39, %ymm0, %ymm0
166	vmovdqa	%ymm12, -0x150(%rbp)
167	vpunpckhqdq	%ymm8, %ymm15, %ymm12
168	vpunpcklqdq	%ymm8, %ymm7, %ymm2
169	vpaddq	-0x150(%rbp), %ymm13, %ymm13
170	vmovdqa	%ymm12, -0x70(%rbp)
171	vmovdqa	-0x50(%rbp), %ymm15
172	vpblendd	$0xf0, -0x70(%rbp), %ymm2, %ymm2
173	vpaddq	%ymm0, %ymm13, %ymm13
174	vmovdqa	%ymm2, -0x170(%rbp)
175	vpxor	%ymm13, %ymm1, %ymm1
176	vpunpckhqdq	%ymm15, %ymm11, %ymm12
177	vpaddq	-0x170(%rbp), %ymm13, %ymm13
178	vpshufd	$0xb1, %ymm1, %ymm1
179	vpaddq	%ymm1, %ymm3, %ymm3
180	vmovdqa	%ymm12, -0x90(%rbp)
181	vpunpcklqdq	%ymm10, %ymm9, %ymm12
182	vpxor	%ymm0, %ymm3, %ymm0
183	vpshufb	%ymm5, %ymm0, %ymm0
184	vpaddq	%ymm0, %ymm13, %ymm13
185	vpxor	%ymm1, %ymm13, %ymm1
186	vpshufb	%ymm4, %ymm1, %ymm1
187	vpaddq	%ymm1, %ymm3, %ymm3
188	vpermq	$0x39, %ymm1, %ymm1
189	vpxor	%ymm0, %ymm3, %ymm0
190	vpsrlq	$0x3f, %ymm0, %ymm2
191	vpaddq	%ymm0, %ymm0, %ymm0
192	vpermq	$0x4e, %ymm3, %ymm3
193	vpor	%ymm2, %ymm0, %ymm0
194	vpalignr	$0x8, %ymm6, %ymm7, %ymm2
195	vpermq	$0x93, %ymm0, %ymm0
196	vpblendd	$0xf0, -0x90(%rbp), %ymm2, %ymm2
197	vpaddq	%ymm2, %ymm13, %ymm2
198	vpblendd	$0x33, %ymm8, %ymm7, %ymm13
199	vpaddq	%ymm0, %ymm2, %ymm2
200	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
201	vmovdqa	-0x30(%rbp), %ymm13
202	vpxor	%ymm2, %ymm1, %ymm1
203	vpaddq	%ymm12, %ymm2, %ymm12
204	vpshufd	$0xb1, %ymm1, %ymm1
205	vpaddq	%ymm1, %ymm3, %ymm3
206	vpxor	%ymm0, %ymm3, %ymm0
207	vpshufb	%ymm5, %ymm0, %ymm0
208	vpaddq	%ymm0, %ymm12, %ymm12
209	vpunpckhqdq	%ymm9, %ymm13, %ymm13
210	vpxor	%ymm1, %ymm12, %ymm1
211	vpshufb	%ymm4, %ymm1, %ymm1
212	vpaddq	%ymm1, %ymm3, %ymm3
213	vpermq	$0x93, %ymm1, %ymm1
214	vpxor	%ymm0, %ymm3, %ymm0
215	vpsrlq	$0x3f, %ymm0, %ymm2
216	vpaddq	%ymm0, %ymm0, %ymm0
217	vpermq	$0x4e, %ymm3, %ymm3
218	vpor	%ymm2, %ymm0, %ymm0
219	vpblendd	$0x33, %ymm6, %ymm8, %ymm2
220	vpermq	$0x39, %ymm0, %ymm0
221	vpblendd	$0xf0, %ymm13, %ymm2, %ymm13
222	vpunpcklqdq	-0x30(%rbp), %ymm15, %ymm2
223	vmovdqa	-0x70(%rbp), %ymm15
224	vpaddq	%ymm13, %ymm12, %ymm13
225	vpalignr	$0x8, %ymm10, %ymm11, %ymm12
226	vpaddq	%ymm0, %ymm13, %ymm13
227	vpblendd	$0xf0, %ymm12, %ymm2, %ymm2
228	vpxor	%ymm13, %ymm1, %ymm1
229	vpaddq	%ymm2, %ymm13, %ymm2
230	vpshufd	$0xb1, %ymm1, %ymm1
231	vpaddq	%ymm1, %ymm3, %ymm3
232	vpxor	%ymm0, %ymm3, %ymm0
233	vpshufb	%ymm5, %ymm0, %ymm0
234	vpaddq	%ymm0, %ymm2, %ymm2
235	vpunpckhqdq	%ymm10, %ymm9, %ymm13
236	vpxor	%ymm1, %ymm2, %ymm1
237	vpshufb	%ymm4, %ymm1, %ymm1
238	vpaddq	%ymm1, %ymm3, %ymm3
239	vpblendd	$0xf0, %ymm14, %ymm13, %ymm13
240	vpxor	%ymm0, %ymm3, %ymm0
241	vpsrlq	$0x3f, %ymm0, %ymm12
242	vpaddq	%ymm0, %ymm0, %ymm0
243	vpermq	$0x39, %ymm1, %ymm1
244	vpor	%ymm12, %ymm0, %ymm0
245	vpunpckhqdq	%ymm6, %ymm7, %ymm12
246	vpermq	$0x93, %ymm0, %ymm0
247	vpermq	$0x4e, %ymm3, %ymm3
248	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
249	vmovdqa	-0x50(%rbp), %ymm15
250	vpaddq	%ymm12, %ymm2, %ymm12
251	vpaddq	%ymm0, %ymm12, %ymm12
252	vpblendd	$0x33, %ymm11, %ymm15, %ymm14
253	vpunpcklqdq	%ymm6, %ymm8, %ymm15
254	vpxor	%ymm12, %ymm1, %ymm1
255	vpaddq	%ymm13, %ymm12, %ymm13
256	vpshufd	$0xb1, %ymm1, %ymm1
257	vpaddq	%ymm1, %ymm3, %ymm3
258	vpxor	%ymm0, %ymm3, %ymm0
259	vpshufb	%ymm5, %ymm0, %ymm0
260	vpaddq	%ymm0, %ymm13, %ymm13
261	vpxor	%ymm1, %ymm13, %ymm1
262	vpshufb	%ymm4, %ymm1, %ymm1
263	vpaddq	%ymm1, %ymm3, %ymm3
264	vpermq	$0x93, %ymm1, %ymm1
265	vpxor	%ymm0, %ymm3, %ymm0
266	vpsrlq	$0x3f, %ymm0, %ymm2
267	vpaddq	%ymm0, %ymm0, %ymm0
268	vpermq	$0x4e, %ymm3, %ymm3
269	vpor	%ymm2, %ymm0, %ymm0
270	vpblendd	$0x33, %ymm8, %ymm11, %ymm2
271	vpermq	$0x39, %ymm0, %ymm12
272	vmovdqa	-0x30(%rbp), %ymm0
273	vpblendd	$0xf0, %ymm14, %ymm2, %ymm2
274	vpaddq	%ymm2, %ymm13, %ymm2
275	vpunpcklqdq	%ymm6, %ymm0, %ymm13
276	vmovdqa	%ymm13, %ymm0
277	vpunpcklqdq	%ymm9, %ymm10, %ymm13
278	vmovdqa	%ymm0, -0x1f0(%rbp)
279	vpaddq	%ymm12, %ymm2, %ymm2
280	vpblendd	$0xf0, %ymm13, %ymm0, %ymm0
281	vpxor	%ymm2, %ymm1, %ymm1
282	vpaddq	%ymm0, %ymm2, %ymm2
283	vpshufd	$0xb1, %ymm1, %ymm1
284	vpaddq	%ymm1, %ymm3, %ymm3
285	vpxor	%ymm12, %ymm3, %ymm12
286	vpshufb	%ymm5, %ymm12, %ymm12
287	vpaddq	%ymm12, %ymm2, %ymm2
288	vpxor	%ymm1, %ymm2, %ymm1
289	vpshufb	%ymm4, %ymm1, %ymm1
290	vpaddq	%ymm1, %ymm3, %ymm3
291	vpermq	$0x39, %ymm1, %ymm1
292	vpxor	%ymm12, %ymm3, %ymm12
293	vpsrlq	$0x3f, %ymm12, %ymm0
294	vpaddq	%ymm12, %ymm12, %ymm12
295	vpermq	$0x4e, %ymm3, %ymm3
296	vpor	%ymm0, %ymm12, %ymm12
297	vpermq	$0x93, %ymm12, %ymm0
298	vpunpckhqdq	%ymm11, %ymm9, %ymm12
299	vpblendd	$0xf0, %ymm15, %ymm12, %ymm12
300	vmovdqa	-0x30(%rbp), %ymm15
301	vpaddq	%ymm12, %ymm2, %ymm2
302	vpaddq	%ymm0, %ymm2, %ymm2
303	vpblendd	$0x33, %ymm10, %ymm15, %ymm12
304	vpxor	%ymm2, %ymm1, %ymm1
305	vpshufd	$0xb1, %ymm1, %ymm1
306	vpaddq	%ymm1, %ymm3, %ymm3
307	vpblendd	$0xf0, %ymm14, %ymm12, %ymm14
308	vpxor	%ymm0, %ymm3, %ymm0
309	vpshufb	%ymm5, %ymm0, %ymm0
310	vmovdqa	-0x50(%rbp), %ymm15
311	vpaddq	%ymm14, %ymm2, %ymm2
312	vpblendd	$0x33, -0x30(%rbp), %ymm8, %ymm14
313	vpaddq	%ymm0, %ymm2, %ymm2
314	vpxor	%ymm1, %ymm2, %ymm1
315	vpshufb	%ymm4, %ymm1, %ymm1
316	vpaddq	%ymm1, %ymm3, %ymm3
317	vpermq	$0x93, %ymm1, %ymm1
318	vpxor	%ymm0, %ymm3, %ymm0
319	vpsrlq	$0x3f, %ymm0, %ymm12
320	vpaddq	%ymm0, %ymm0, %ymm0
321	vpermq	$0x4e, %ymm3, %ymm3
322	vpor	%ymm12, %ymm0, %ymm0
323	vpblendd	$0x33, %ymm15, %ymm6, %ymm12
324	vpermq	$0x39, %ymm0, %ymm0
325	vpblendd	$0xf0, %ymm14, %ymm12, %ymm12
326	vpblendd	$0x33, %ymm9, %ymm7, %ymm14
327	vpaddq	%ymm12, %ymm2, %ymm2
328	vpalignr	$0x8, %ymm10, %ymm7, %ymm12
329	vpaddq	%ymm0, %ymm2, %ymm2
330	vpblendd	$0xf0, %ymm14, %ymm12, %ymm12
331	vmovdqa	-0x30(%rbp), %ymm14
332	vpxor	%ymm2, %ymm1, %ymm1
333	vpaddq	%ymm12, %ymm2, %ymm2
334	vpshufd	$0xb1, %ymm1, %ymm1
335	vpaddq	%ymm1, %ymm3, %ymm3
336	vpxor	%ymm0, %ymm3, %ymm0
337	vpshufb	%ymm5, %ymm0, %ymm0
338	vpaddq	%ymm0, %ymm2, %ymm2
339	vpxor	%ymm1, %ymm2, %ymm1
340	vpshufb	%ymm4, %ymm1, %ymm1
341	vpaddq	%ymm1, %ymm3, %ymm3
342	vpermq	$0x39, %ymm1, %ymm1
343	vpxor	%ymm0, %ymm3, %ymm0
344	vpsrlq	$0x3f, %ymm0, %ymm12
345	vpaddq	%ymm0, %ymm0, %ymm0
346	vpermq	$0x4e, %ymm3, %ymm3
347	vpor	%ymm12, %ymm0, %ymm0
348	vpunpcklqdq	-0x30(%rbp), %ymm8, %ymm12
349	vpblendd	$0xf0, %ymm13, %ymm12, %ymm13
350	vpermq	$0x93, %ymm0, %ymm0
351	vpaddq	%ymm13, %ymm2, %ymm2
352	vpunpcklqdq	%ymm6, %ymm7, %ymm12
353	vpunpckhqdq	%ymm8, %ymm6, %ymm13
354	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
355	vpaddq	%ymm0, %ymm2, %ymm2
356	vpunpckhqdq	%ymm10, %ymm15, %ymm13
357	vpxor	%ymm2, %ymm1, %ymm1
358	vpaddq	%ymm12, %ymm2, %ymm2
359	vpshufd	$0xb1, %ymm1, %ymm1
360	vpaddq	%ymm1, %ymm3, %ymm3
361	vpxor	%ymm0, %ymm3, %ymm0
362	vpshufb	%ymm5, %ymm0, %ymm0
363	vpaddq	%ymm0, %ymm2, %ymm2
364	vpxor	%ymm1, %ymm2, %ymm1
365	vpshufb	%ymm4, %ymm1, %ymm1
366	vpaddq	%ymm1, %ymm3, %ymm3
367	vpermq	$0x93, %ymm1, %ymm1
368	vpxor	%ymm0, %ymm3, %ymm0
369	vpsrlq	$0x3f, %ymm0, %ymm12
370	vpaddq	%ymm0, %ymm0, %ymm0
371	vpermq	$0x4e, %ymm3, %ymm3
372	vpor	%ymm12, %ymm0, %ymm0
373	vpblendd	$0x33, %ymm11, %ymm14, %ymm12
374	vmovdqa	%ymm15, %ymm14
375	vpermq	$0x39, %ymm0, %ymm0
376	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
377	vpblendd	$0x33, %ymm14, %ymm9, %ymm13
378	vmovdqa	-0x90(%rbp), %ymm15
379	vpaddq	%ymm12, %ymm2, %ymm2
380	vpunpckhqdq	%ymm11, %ymm7, %ymm12
381	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
382	vpshufd	$0x4e, %ymm9, %ymm13
383	vpaddq	%ymm0, %ymm2, %ymm2
384	vpxor	%ymm2, %ymm1, %ymm1
385	vpaddq	%ymm12, %ymm2, %ymm2
386	vpshufd	$0xb1, %ymm1, %ymm1
387	vpaddq	%ymm1, %ymm3, %ymm3
388	vpxor	%ymm0, %ymm3, %ymm0
389	vpshufb	%ymm5, %ymm0, %ymm0
390	vpaddq	%ymm0, %ymm2, %ymm2
391	vpxor	%ymm1, %ymm2, %ymm1
392	vpshufb	%ymm4, %ymm1, %ymm1
393	vpaddq	%ymm1, %ymm3, %ymm3
394	vpermq	$0x39, %ymm1, %ymm1
395	vpxor	%ymm0, %ymm3, %ymm0
396	vpsrlq	$0x3f, %ymm0, %ymm12
397	vpaddq	%ymm0, %ymm0, %ymm0
398	vpermq	$0x4e, %ymm3, %ymm3
399	vpor	%ymm12, %ymm0, %ymm0
400	vpblendd	$0x33, %ymm7, %ymm10, %ymm12
401	vpermq	$0x93, %ymm0, %ymm0
402	vpblendd	$0xf0, -0x1b0(%rbp), %ymm12, %ymm12
403	vpaddq	%ymm12, %ymm2, %ymm2
404	vpalignr	$0x8, %ymm7, %ymm6, %ymm12
405	vpaddq	%ymm0, %ymm2, %ymm2
406	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
407	vmovdqa	-0x70(%rbp), %ymm15
408	vpxor	%ymm2, %ymm1, %ymm1
409	vpaddq	%ymm12, %ymm2, %ymm2
410	vpshufd	$0xb1, %ymm1, %ymm1
411	vpaddq	%ymm1, %ymm3, %ymm3
412	vpxor	%ymm0, %ymm3, %ymm0
413	vpshufb	%ymm5, %ymm0, %ymm0
414	vpaddq	%ymm0, %ymm2, %ymm2
415	vpxor	%ymm1, %ymm2, %ymm1
416	vpshufb	%ymm4, %ymm1, %ymm1
417	vpaddq	%ymm1, %ymm3, %ymm3
418	vpermq	$0x93, %ymm1, %ymm1
419	vpxor	%ymm0, %ymm3, %ymm0
420	vpsrlq	$0x3f, %ymm0, %ymm12
421	vpaddq	%ymm0, %ymm0, %ymm0
422	vpermq	$0x4e, %ymm3, %ymm3
423	vpor	%ymm12, %ymm0, %ymm0
424	vpunpcklqdq	-0x30(%rbp), %ymm10, %ymm12
425	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
426	vpermq	$0x39, %ymm0, %ymm0
427	vpaddq	%ymm12, %ymm2, %ymm2
428	vpblendd	$0x33, %ymm8, %ymm6, %ymm12
429	vpblendd	$0x33, %ymm7, %ymm8, %ymm13
430	vpaddq	%ymm0, %ymm2, %ymm2
431	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
432	vmovdqa	-0x90(%rbp), %ymm15
433	vpxor	%ymm2, %ymm1, %ymm1
434	vpaddq	%ymm12, %ymm2, %ymm2
435	vpshufd	$0xb1, %ymm1, %ymm1
436	vpaddq	%ymm1, %ymm3, %ymm3
437	vpxor	%ymm0, %ymm3, %ymm0
438	vpshufb	%ymm5, %ymm0, %ymm0
439	vpaddq	%ymm0, %ymm2, %ymm2
440	vpxor	%ymm1, %ymm2, %ymm1
441	vpshufb	%ymm4, %ymm1, %ymm1
442	vpaddq	%ymm1, %ymm3, %ymm3
443	vpermq	$0x39, %ymm1, %ymm1
444	vpxor	%ymm0, %ymm3, %ymm0
445	vpsrlq	$0x3f, %ymm0, %ymm12
446	vpaddq	%ymm0, %ymm0, %ymm0
447	vpermq	$0x4e, %ymm3, %ymm3
448	vpor	%ymm12, %ymm0, %ymm0
449	vpunpckhqdq	-0x30(%rbp), %ymm7, %ymm12
450	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
451	vmovdqa	%ymm14, %ymm13
452	vpaddq	%ymm12, %ymm2, %ymm2
453	vpalignr	$0x8, %ymm6, %ymm14, %ymm14
454	vpunpckhqdq	%ymm9, %ymm10, %ymm12
455	vpermq	$0x93, %ymm0, %ymm0
456	vpblendd	$0xf0, %ymm12, %ymm14, %ymm12
457	vpaddq	%ymm0, %ymm2, %ymm2
458	vpxor	%ymm2, %ymm1, %ymm1
459	vpaddq	%ymm12, %ymm2, %ymm2
460	vpshufd	$0xb1, %ymm1, %ymm1
461	vpaddq	%ymm1, %ymm3, %ymm3
462	vpxor	%ymm0, %ymm3, %ymm0
463	vpshufb	%ymm5, %ymm0, %ymm0
464	vpaddq	%ymm0, %ymm2, %ymm2
465	vpxor	%ymm1, %ymm2, %ymm1
466	vpshufb	%ymm4, %ymm1, %ymm1
467	vpaddq	%ymm1, %ymm3, %ymm3
468	vpermq	$0x93, %ymm1, %ymm1
469	vpxor	%ymm0, %ymm3, %ymm0
470	vpsrlq	$0x3f, %ymm0, %ymm12
471	vpaddq	%ymm0, %ymm0, %ymm0
472	vpermq	$0x4e, %ymm3, %ymm3
473	vpor	%ymm12, %ymm0, %ymm0
474	vpunpcklqdq	%ymm8, %ymm9, %ymm12
475	vpblendd	$0xf0, %ymm12, %ymm15, %ymm12
476	vpermq	$0x39, %ymm0, %ymm0
477	vpaddq	%ymm12, %ymm2, %ymm2
478	vpunpcklqdq	%ymm11, %ymm10, %ymm12
479	vmovdqa	%ymm13, %ymm15
480	vpblendd	$0xf0, -0x1f0(%rbp), %ymm12, %ymm12
481	vpaddq	%ymm0, %ymm2, %ymm2
482	vpxor	%ymm2, %ymm1, %ymm1
483	vpaddq	%ymm12, %ymm2, %ymm2
484	vpshufd	$0xb1, %ymm1, %ymm1
485	vpaddq	%ymm1, %ymm3, %ymm3
486	vpxor	%ymm0, %ymm3, %ymm0
487	vpshufb	%ymm5, %ymm0, %ymm0
488	vpaddq	%ymm0, %ymm2, %ymm2
489	vpxor	%ymm1, %ymm2, %ymm1
490	vpshufb	%ymm4, %ymm1, %ymm1
491	vpaddq	%ymm1, %ymm3, %ymm3
492	vpermq	$0x39, %ymm1, %ymm1
493	vpxor	%ymm0, %ymm3, %ymm0
494	vpsrlq	$0x3f, %ymm0, %ymm12
495	vpaddq	%ymm0, %ymm0, %ymm0
496	vpermq	$0x4e, %ymm3, %ymm3
497	vpor	%ymm12, %ymm0, %ymm0
498	vmovdqa	-0x30(%rbp), %ymm12
499	vpermq	$0x93, %ymm0, %ymm0
500	vpunpcklqdq	%ymm13, %ymm12, %ymm12
501	vpalignr	$0x8, %ymm6, %ymm10, %ymm13
502	vpblendd	$0xf0, %ymm13, %ymm12, %ymm12
503	vpunpckhqdq	%ymm9, %ymm15, %ymm13
504	vpalignr	$0x8, %ymm8, %ymm9, %ymm9
505	vpaddq	%ymm12, %ymm2, %ymm12
506	vpalignr	$0x8, %ymm10, %ymm6, %ymm6
507	vpblendd	$0xf0, %ymm9, %ymm13, %ymm9
508	vpaddq	%ymm0, %ymm12, %ymm12
509	vpblendd	$0xf0, %ymm6, %ymm7, %ymm6
510	vpxor	%ymm12, %ymm1, %ymm1
511	vpaddq	%ymm9, %ymm12, %ymm12
512	vpshufd	$0xb1, %ymm1, %ymm1
513	vpaddq	%ymm1, %ymm3, %ymm3
514	vpxor	%ymm3, %ymm0, %ymm0
515	vpshufb	%ymm5, %ymm0, %ymm0
516	vpaddq	%ymm0, %ymm12, %ymm12
517	vpxor	%ymm1, %ymm12, %ymm1
518	vpaddq	%ymm6, %ymm12, %ymm12
519	vpshufb	%ymm4, %ymm1, %ymm1
520	vmovdqa	-0x30(%rbp), %ymm6
521	vpaddq	%ymm1, %ymm3, %ymm3
522	vpermq	$0x93, %ymm1, %ymm1
523	vpxor	%ymm0, %ymm3, %ymm0
524	vpsrlq	$0x3f, %ymm0, %ymm2
525	vpaddq	%ymm0, %ymm0, %ymm0
526	vpermq	$0x4e, %ymm3, %ymm3
527	vpor	%ymm2, %ymm0, %ymm0
528	vpblendd	$0x33, %ymm8, %ymm6, %ymm2
529	vpermq	$0x39, %ymm0, %ymm0
530	vpaddq	%ymm0, %ymm12, %ymm12
531	vpblendd	$0xf0, %ymm11, %ymm2, %ymm2
532	vpxor	%ymm12, %ymm1, %ymm1
533	vpshufd	$0xb1, %ymm1, %ymm1
534	vpaddq	%ymm1, %ymm3, %ymm3
535	vpaddq	%ymm2, %ymm12, %ymm12
536	vpxor	%ymm3, %ymm0, %ymm0
537	vpshufb	%ymm5, %ymm0, %ymm0
538	vmovdqa	-0x30(%rbp), %ymm6
539	vpaddq	%ymm0, %ymm12, %ymm12
540	vpxor	%ymm1, %ymm12, %ymm1
541	vpshufb	%ymm4, %ymm1, %ymm1
542	vpaddq	%ymm1, %ymm3, %ymm3
543	vpermq	$0x39, %ymm1, %ymm1
544	vpxor	%ymm0, %ymm3, %ymm0
545	vpsrlq	$0x3f, %ymm0, %ymm2
546	vpaddq	%ymm0, %ymm0, %ymm0
547	vpermq	$0x4e, %ymm3, %ymm3
548	vpor	%ymm2, %ymm0, %ymm2
549	vpunpckhqdq	%ymm10, %ymm6, %ymm0
550	vmovdqa	-0x1d0(%rbp), %ymm6
551	vpermq	$0x93, %ymm2, %ymm2
552	vpblendd	$0xf0, %ymm0, %ymm6, %ymm0
553	vpaddq	%ymm0, %ymm12, %ymm12
554	vpunpcklqdq	%ymm11, %ymm8, %ymm0
555	vpblendd	$0x33, -0x30(%rbp), %ymm11, %ymm11
556	vpunpckhqdq	%ymm7, %ymm8, %ymm8
557	vpaddq	%ymm2, %ymm12, %ymm12
558	vpblendd	$0xf0, %ymm11, %ymm0, %ymm11
559	vpblendd	$0xf0, %ymm8, %ymm13, %ymm8
560	vpunpcklqdq	%ymm10, %ymm7, %ymm7
561	vpxor	%ymm12, %ymm1, %ymm1
562	vpaddq	%ymm11, %ymm12, %ymm12
563	vpshufd	$0xb1, %ymm1, %ymm1
564	vpaddq	%ymm1, %ymm3, %ymm3
565	vpxor	%ymm3, %ymm2, %ymm2
566	vpshufb	%ymm5, %ymm2, %ymm2
567	vpaddq	%ymm2, %ymm12, %ymm12
568	vpblendd	$0xf0, %ymm7, %ymm14, %ymm7
569	vpxor	%ymm1, %ymm12, %ymm1
570	vpshufb	%ymm4, %ymm1, %ymm1
571	vpaddq	%ymm1, %ymm3, %ymm3
572	vpaddq	%ymm8, %ymm12, %ymm8
573	vpxor	%ymm2, %ymm3, %ymm2
574	vpsrlq	$0x3f, %ymm2, %ymm0
575	vpaddq	%ymm2, %ymm2, %ymm2
576	vpermq	$0x93, %ymm1, %ymm1
577	vpor	%ymm0, %ymm2, %ymm2
578	vpermq	$0x39, %ymm2, %ymm2
579	vpaddq	%ymm2, %ymm8, %ymm8
580	vpermq	$0x4e, %ymm3, %ymm3
581	vpxor	%ymm8, %ymm1, %ymm1
582	vpaddq	%ymm7, %ymm8, %ymm8
583	vpshufd	$0xb1, %ymm1, %ymm1
584	vpaddq	%ymm1, %ymm3, %ymm3
585	vpxor	%ymm3, %ymm2, %ymm2
586	vpshufb	%ymm5, %ymm2, %ymm2
587	vpaddq	%ymm2, %ymm8, %ymm8
588	vpxor	%ymm1, %ymm8, %ymm1
589	vpaddq	-0x190(%rbp), %ymm8, %ymm8
590	vpshufb	%ymm4, %ymm1, %ymm1
591	vpaddq	%ymm1, %ymm3, %ymm3
592	vpxor	%ymm2, %ymm3, %ymm2
593	vpsrlq	$0x3f, %ymm2, %ymm0
594	vpaddq	%ymm2, %ymm2, %ymm2
595	vpermq	$0x39, %ymm1, %ymm1
596	vpor	%ymm0, %ymm2, %ymm2
597	vpermq	$0x93, %ymm2, %ymm0
598	vpaddq	%ymm0, %ymm8, %ymm8
599	vpermq	$0x4e, %ymm3, %ymm3
600	vpxor	%ymm8, %ymm1, %ymm1
601	vpaddq	-0xb0(%rbp), %ymm8, %ymm8
602	vpshufd	$0xb1, %ymm1, %ymm1
603	vpaddq	%ymm1, %ymm3, %ymm3
604	vpxor	%ymm3, %ymm0, %ymm0
605	vpshufb	%ymm5, %ymm0, %ymm0
606	vpaddq	%ymm0, %ymm8, %ymm8
607	vpxor	%ymm1, %ymm8, %ymm1
608	vpaddq	-0xd0(%rbp), %ymm8, %ymm8
609	vpshufb	%ymm4, %ymm1, %ymm1
610	vpaddq	%ymm1, %ymm3, %ymm3
611	vpxor	%ymm0, %ymm3, %ymm0
612	vpaddq	%ymm0, %ymm0, %ymm6
613	vpermq	$0x93, %ymm1, %ymm1
614	vpermq	$0x4e, %ymm3, %ymm3
615	vpsrlq	$0x3f, %ymm0, %ymm2
616	vpor	%ymm2, %ymm6, %ymm6
617	vpermq	$0x39, %ymm6, %ymm6
618	vpaddq	%ymm6, %ymm8, %ymm2
619	vpxor	%ymm2, %ymm1, %ymm1
620	vpaddq	-0xf0(%rbp), %ymm2, %ymm2
621	vpshufd	$0xb1, %ymm1, %ymm1
622	vpaddq	%ymm1, %ymm3, %ymm3
623	vpxor	%ymm3, %ymm6, %ymm6
624	vpshufb	%ymm5, %ymm6, %ymm6
625	vpaddq	%ymm6, %ymm2, %ymm2
626	vpxor	%ymm1, %ymm2, %ymm1
627	vpaddq	-0x110(%rbp), %ymm2, %ymm2
628	vpshufb	%ymm4, %ymm1, %ymm1
629	vpaddq	%ymm1, %ymm3, %ymm3
630	vpxor	%ymm6, %ymm3, %ymm6
631	vpsrlq	$0x3f, %ymm6, %ymm0
632	vpaddq	%ymm6, %ymm6, %ymm6
633	vpermq	$0x39, %ymm1, %ymm1
634	vpor	%ymm0, %ymm6, %ymm0
635	vpermq	$0x93, %ymm0, %ymm0
636	vpaddq	%ymm0, %ymm2, %ymm2
637	vpermq	$0x4e, %ymm3, %ymm3
638	vpxor	%ymm2, %ymm1, %ymm1
639	vpaddq	-0x130(%rbp), %ymm2, %ymm2
640	vpshufd	$0xb1, %ymm1, %ymm1
641	vpaddq	%ymm1, %ymm3, %ymm3
642	vpxor	%ymm3, %ymm0, %ymm0
643	vpshufb	%ymm5, %ymm0, %ymm0
644	vpaddq	%ymm0, %ymm2, %ymm2
645	vpxor	%ymm1, %ymm2, %ymm1
646	vpaddq	-0x150(%rbp), %ymm2, %ymm2
647	vpshufb	%ymm4, %ymm1, %ymm1
648	vpaddq	%ymm1, %ymm3, %ymm3
649	vpxor	%ymm0, %ymm3, %ymm0
650	vpsrlq	$0x3f, %ymm0, %ymm6
651	vpaddq	%ymm0, %ymm0, %ymm0
652	vpermq	$0x93, %ymm1, %ymm1
653	vpor	%ymm6, %ymm0, %ymm0
654	vpermq	$0x39, %ymm0, %ymm0
655	vpaddq	%ymm0, %ymm2, %ymm2
656	vpermq	$0x4e, %ymm3, %ymm3
657	vpxor	%ymm2, %ymm1, %ymm1
658	vpaddq	-0x170(%rbp), %ymm2, %ymm2
659	vpshufd	$0xb1, %ymm1, %ymm1
660	vpaddq	%ymm1, %ymm3, %ymm3
661	vpxor	%ymm3, %ymm0, %ymm0
662	vpshufb	%ymm5, %ymm0, %ymm5
663	vpaddq	%ymm5, %ymm2, %ymm2
664	vpxor	%ymm1, %ymm2, %ymm1
665	vpshufb	%ymm4, %ymm1, %ymm4
666	vpaddq	%ymm4, %ymm3, %ymm0
667	vpermq	$0x39, %ymm4, %ymm4
668	vpxor	%ymm5, %ymm0, %ymm5
669	vpsrlq	$0x3f, %ymm5, %ymm1
670	vpaddq	%ymm5, %ymm5, %ymm5
671	vpermq	$0x4e, %ymm0, %ymm0
672	vpor	%ymm1, %ymm5, %ymm5
673	vpxor	(%rdi), %ymm0, %ymm0
674	vpermq	$0x93, %ymm5, %ymm5
675	vpxor	%ymm2, %ymm0, %ymm2
676	vmovdqu	%ymm2, (%rdi)
677	vpxor	0x20(%rdi), %ymm5, %ymm5
678	vpxor	%ymm4, %ymm5, %ymm4
679	vmovdqu	%ymm4, 0x20(%rdi)
680	vzeroupper
681	xorl	%eax, %eax
682	addq	$0x170, %rsp
683	popq	%r10
684	.cfi_def_cfa %r10, 0
685	popq	%rbp
686	leaq	-0x8(%r10), %rsp
687	.cfi_def_cfa %rsp, 8
688	retq
689
690	.cfi_endproc
691.size blake2b_compress_avx2, .-blake2b_compress_avx2
692.section .rodata
693"blake2b_IV/1":
694"DATAat0x4013a0":
695"DATAat0x401380":
696