xref: /llvm-project/bolt/test/X86/cfi-instrs-reordered.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1## Check that llvm-bolt is able to read a file with DWARF Exception CFI
2## information and fix CFI information after reordering.
3
4# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o
5# RUN: llvm-strip --strip-unneeded %t.o
6# RUN: %clangxx %cflags %t.o -o %t.exe
7# RUN: llvm-bolt %t.exe -o %t --reorder-blocks=cache --print-after-lowering \
8# RUN:   --print-only=_Z10SolveCubicddddPiPd 2>&1 | FileCheck %s
9#
10# Entry BB
11# CHECK:      divsd   %xmm0, %xmm1
12# CHECK:      pushq   %rbx
13# CHECK:      !CFI    $0      ; OpDefCfaOffset
14# CHECK:      !CFI    $1      ; OpOffset
15# CHECK:      movq    %rsi, %rbx
16# CHECK:      subq    $0x70, %rsp
17# CHECK:      !CFI    $2      ; OpDefCfaOffset
18# CHECK:      divsd   %xmm0, %xmm2
19# Duplicated tail
20# CHECK:      addq    $0x70, %rsp
21# CHECK:      !CFI    $3      ; OpDefCfaOffset
22# CHECK:      popq    %rbx
23# CHECK:      !CFI    $4      ; OpDefCfaOffset
24# CHECK:      retq
25# CHECK:      !CFI    {{.*}}  ; OpDefCfa
26# Epilogue rescheduled to the middle of the function
27# CHECK:      addq    $0x70, %rsp
28# CHECK:      !CFI    $6      ; OpDefCfaOffset
29# CHECK:      popq    %rbx
30# CHECK:      !CFI    $7      ; OpDefCfaOffset
31# CHECK:      retq
32# CHECK:      !CFI    {{.*}}  ; OpDefCfa
33
34	.text
35  .globl main
36  .type main, %function
37main:
38# FDATA: 0 [unknown] 0 1 main 0 0 0
39	.cfi_startproc
40LBB00:
41	pushq	%r15
42	.cfi_def_cfa_offset 16
43	.cfi_offset %r15, -16
44	movl	$0x401520, %edi
45	pushq	%r14
46	.cfi_def_cfa_offset 24
47	.cfi_offset %r14, -24
48	pushq	%r13
49	.cfi_def_cfa_offset 32
50	.cfi_offset %r13, -32
51	pushq	%r12
52	.cfi_def_cfa_offset 40
53	.cfi_offset %r12, -40
54	xorl	%r12d, %r12d
55	pushq	%rbp
56	.cfi_def_cfa_offset 48
57	.cfi_offset %rbp, -48
58	pushq	%rbx
59	.cfi_def_cfa_offset 56
60	.cfi_offset %rbx, -56
61	subq	$0x98, %rsp
62	.cfi_def_cfa_offset 208
63	leaq	0x60(%rsp), %rbx
64	leaq	0x8c(%rsp), %rbp
65	callq	puts@PLT
66	movsd	DATAat0x401640(%rip), %xmm3
67	movq	%rbx, %rsi
68	movsd	DATAat0x401648(%rip), %xmm2
69	movq	%rbp, %rdi
70	movsd	DATAat0x401650(%rip), %xmm1
71	movq	%rbx, %r13
72	movsd	DATAat0x401658(%rip), %xmm0
73	callq	_Z10SolveCubicddddPiPd
74	movl	$0x4015d8, %edi
75	xorl	%eax, %eax
76	callq	printf@PLT
77LBB00_br: 	jmp	Ltmp0
78# FDATA: 1 main #LBB00_br# 1 main #Ltmp0# 0 0
79
80Ltmp1:
81	movsd	(%r13), %xmm0
82	movl	$0x4015e3, %edi
83	movl	$0x1, %eax
84	addl	$0x1, %r12d
85	addq	$0x8, %r13
86Ltmp1_br: 	callq	printf@PLT
87# FDATA: 1 main #Ltmp1_br# 1 main #Ltmp0# 0 0
88
89Ltmp0:
90	cmpl	0x8c(%rsp), %r12d
91Ltmp0_br: 	jl	Ltmp1
92# FDATA: 1 main #Ltmp0_br# 1 main #Ltmp1# 0 0
93# FDATA: 1 main #Ltmp0_br# 1 main #LFT2# 0 0
94
95LFT2:
96	movl	$0xa, %edi
97	movq	%rbx, %r13
98	xorl	%r12d, %r12d
99	callq	putchar@PLT
100	movsd	DATAat0x401640(%rip), %xmm3
101	movq	%rbx, %rsi
102	movsd	DATAat0x401660(%rip), %xmm2
103	movq	%rbp, %rdi
104	movsd	DATAat0x401668(%rip), %xmm1
105	movsd	DATAat0x401658(%rip), %xmm0
106	callq	_Z10SolveCubicddddPiPd
107	movl	$0x4015d8, %edi
108	xorl	%eax, %eax
109	callq	printf@PLT
110LFT2_br: 	jmp	Ltmp2
111# FDATA: 1 main #LFT2_br# 1 main #Ltmp2# 0 0
112
113Ltmp3:
114	movsd	(%r13), %xmm0
115	movl	$0x4015e3, %edi
116	movl	$0x1, %eax
117	addl	$0x1, %r12d
118	addq	$0x8, %r13
119Ltmp3_br: 	callq	printf@PLT
120# FDATA: 1 main #Ltmp3_br# 1 main #Ltmp2# 0 0
121
122Ltmp2:
123	cmpl	0x8c(%rsp), %r12d
124Ltmp2_br: 	jl	Ltmp3
125# FDATA: 1 main #Ltmp2_br# 1 main #Ltmp3# 0 0
126# FDATA: 1 main #Ltmp2_br# 1 main #LFT4# 0 0
127
128LFT4:
129	movl	$0xa, %edi
130	callq	putchar@PLT
131	movsd	DATAat0x401670(%rip), %xmm3
132	movq	%rbx, %rsi
133	movsd	DATAat0x401678(%rip), %xmm2
134	movq	%rbp, %rdi
135	movsd	DATAat0x401680(%rip), %xmm1
136	movsd	DATAat0x401658(%rip), %xmm0
137	callq	_Z10SolveCubicddddPiPd
138	movl	$0x4015d8, %edi
139	xorl	%eax, %eax
140	callq	printf@PLT
141	movq	%rbx, %r12
142	xorl	%r13d, %r13d
143LFT4_br: 	jmp	Ltmp4
144# FDATA: 1 main #LFT4_br# 1 main #Ltmp4# 0 0
145
146Ltmp5:
147	movsd	(%r12), %xmm0
148	movl	$0x4015e3, %edi
149	movl	$0x1, %eax
150	callq	printf@PLT
151	addl	$0x1, %r13d
152Ltmp5_br: 	addq	$0x8, %r12
153# FDATA: 1 main #Ltmp5_br# 1 main #Ltmp4# 0 0
154
155Ltmp4:
156	cmpl	0x8c(%rsp), %r13d
157Ltmp4_br: 	jl	Ltmp5
158# FDATA: 1 main #Ltmp4_br# 1 main #Ltmp5# 0 0
159# FDATA: 1 main #Ltmp4_br# 1 main #LFT6# 0 0
160
161LFT6:
162	movl	$0xa, %edi
163LFT6_br: 	callq	putchar@PLT
164# FDATA: 1 main #LFT6_br# 1 main #Ltmp27# 0 0
165
166Ltmp27:
167	movsd	DATAat0x401658(%rip), %xmm2
168	movq	%rbx, %rsi
169	movsd	DATAat0x401688(%rip), %xmm3
170	movq	%rbp, %rdi
171	movsd	DATAat0x401690(%rip), %xmm1
172	movq	%rbx, %r13
173	movapd	%xmm2, %xmm0
174	xorl	%r12d, %r12d
175	callq	_Z10SolveCubicddddPiPd
176	movl	$0x4015d8, %edi
177	xorl	%eax, %eax
178	callq	printf@PLT
179Ltmp27_br: 	jmp	Ltmp6
180# FDATA: 1 main #Ltmp27_br# 1 main #Ltmp6# 0 0
181
182Ltmp7:
183	movsd	(%r13), %xmm0
184	movl	$0x4015e3, %edi
185	movl	$0x1, %eax
186	addl	$0x1, %r12d
187	addq	$0x8, %r13
188Ltmp7_br: 	callq	printf@PLT
189# FDATA: 1 main #Ltmp7_br# 1 main #Ltmp6# 0 0
190
191Ltmp6:
192	cmpl	0x8c(%rsp), %r12d
193Ltmp6_br: 	jl	Ltmp7
194# FDATA: 1 main #Ltmp6_br# 1 main #Ltmp7# 0 0
195# FDATA: 1 main #Ltmp6_br# 1 main #LFT9# 0 0
196
197LFT9:
198	movl	$0xa, %edi
199	movq	%rbx, %r13
200	xorl	%r12d, %r12d
201	callq	putchar@PLT
202	movsd	DATAat0x401698(%rip), %xmm3
203	movq	%rbx, %rsi
204	movsd	DATAat0x4016a0(%rip), %xmm2
205	movq	%rbp, %rdi
206	movsd	DATAat0x4016a8(%rip), %xmm1
207	movsd	DATAat0x4016b0(%rip), %xmm0
208	callq	_Z10SolveCubicddddPiPd
209	movl	$0x4015d8, %edi
210	xorl	%eax, %eax
211	callq	printf@PLT
212LFT9_br: 	jmp	Ltmp8
213# FDATA: 1 main #LFT9_br# 1 main #Ltmp8# 0 0
214
215Ltmp9:
216	movsd	(%r13), %xmm0
217	movl	$0x4015e3, %edi
218	movl	$0x1, %eax
219	addl	$0x1, %r12d
220	addq	$0x8, %r13
221Ltmp9_br: 	callq	printf@PLT
222# FDATA: 1 main #Ltmp9_br# 1 main #Ltmp8# 0 0
223
224Ltmp8:
225	cmpl	0x8c(%rsp), %r12d
226Ltmp8_br: 	jl	Ltmp9
227# FDATA: 1 main #Ltmp8_br# 1 main #Ltmp9# 0 0
228# FDATA: 1 main #Ltmp8_br# 1 main #LFT11# 0 0
229
230LFT11:
231	movl	$0xa, %edi
232	movq	%rbx, %r13
233	xorl	%r12d, %r12d
234	callq	putchar@PLT
235	movsd	DATAat0x4016b8(%rip), %xmm3
236	movq	%rbx, %rsi
237	movsd	DATAat0x4016c0(%rip), %xmm2
238	movq	%rbp, %rdi
239	movsd	DATAat0x4016c8(%rip), %xmm1
240	movsd	DATAat0x4016d0(%rip), %xmm0
241	callq	_Z10SolveCubicddddPiPd
242	movl	$0x4015d8, %edi
243	xorl	%eax, %eax
244	callq	printf@PLT
245LFT11_br: 	jmp	Ltmp10
246# FDATA: 1 main #LFT11_br# 1 main #Ltmp10# 0 0
247
248Ltmp11:
249	movsd	(%r13), %xmm0
250	movl	$0x4015e3, %edi
251	movl	$0x1, %eax
252	addl	$0x1, %r12d
253	addq	$0x8, %r13
254Ltmp11_br: 	callq	printf@PLT
255# FDATA: 1 main #Ltmp11_br# 1 main #Ltmp10# 0 0
256
257Ltmp10:
258	cmpl	0x8c(%rsp), %r12d
259Ltmp10_br: 	jl	Ltmp11
260# FDATA: 1 main #Ltmp10_br# 1 main #Ltmp11# 0 0
261# FDATA: 1 main #Ltmp10_br# 1 main #LFT13# 0 0
262
263LFT13:
264	movl	$0xa, %edi
265	callq	putchar@PLT
266	movsd	DATAat0x4016d8(%rip), %xmm3
267	movq	%rbx, %rsi
268	movsd	DATAat0x4016e0(%rip), %xmm2
269	movq	%rbp, %rdi
270	movsd	DATAat0x4016e8(%rip), %xmm1
271	movsd	DATAat0x4016f0(%rip), %xmm0
272	callq	_Z10SolveCubicddddPiPd
273	movl	$0x4015d8, %edi
274	xorl	%eax, %eax
275	callq	printf@PLT
276	movq	%rbx, %r12
277	xorl	%r13d, %r13d
278LFT13_br: 	jmp	Ltmp12
279# FDATA: 1 main #LFT13_br# 1 main #Ltmp12# 0 0
280
281Ltmp13:
282	movsd	(%r12), %xmm0
283	movl	$0x4015e3, %edi
284	movl	$0x1, %eax
285	callq	printf@PLT
286	addl	$0x1, %r13d
287Ltmp13_br: 	addq	$0x8, %r12
288# FDATA: 1 main #Ltmp13_br# 1 main #Ltmp12# 0 0
289
290Ltmp12:
291	cmpl	0x8c(%rsp), %r13d
292Ltmp12_br: 	jl	Ltmp13
293# FDATA: 1 main #Ltmp12_br# 1 main #Ltmp13# 0 0
294# FDATA: 1 main #Ltmp12_br# 1 main #LFT15# 0 0
295
296LFT15:
297	movl	$0xa, %edi
298LFT15_br: 	callq	putchar@PLT
299# FDATA: 1 main #LFT15_br# 1 main #Ltmp29# 0 0
300
301Ltmp29:
302	movsd	DATAat0x4016f8(%rip), %xmm3
303	movq	%rbx, %rsi
304	movsd	DATAat0x401700(%rip), %xmm2
305	movq	%rbp, %rdi
306	movsd	DATAat0x401708(%rip), %xmm1
307	movq	%rbx, %r13
308	movsd	DATAat0x401710(%rip), %xmm0
309	xorl	%r12d, %r12d
310	callq	_Z10SolveCubicddddPiPd
311	movl	$0x4015d8, %edi
312	xorl	%eax, %eax
313	callq	printf@PLT
314Ltmp29_br: 	jmp	Ltmp14
315# FDATA: 1 main #Ltmp29_br# 1 main #Ltmp14# 0 0
316
317Ltmp15:
318	movsd	(%r13), %xmm0
319	movl	$0x4015e3, %edi
320	movl	$0x1, %eax
321	addl	$0x1, %r12d
322	addq	$0x8, %r13
323Ltmp15_br: 	callq	printf@PLT
324# FDATA: 1 main #Ltmp15_br# 1 main #Ltmp14# 0 0
325
326Ltmp14:
327	cmpl	0x8c(%rsp), %r12d
328Ltmp14_br: 	jl	Ltmp15
329# FDATA: 1 main #Ltmp14_br# 1 main #Ltmp15# 0 0
330# FDATA: 1 main #Ltmp14_br# 1 main #LFT16# 0 0
331
332LFT16:
333	movl	$0xa, %edi
334	movabsq	$-0x4010000000000000, %r14
335	callq	putchar@PLT
336	movabsq	$0x3ff0000000000000, %rsi
337	movl	$0x0, 0x5c(%rsp)
338LFT16_br: 	movq	%rsi, 0x50(%rsp)
339# FDATA: 1 main #LFT16_br# 1 main #Ltmp21# 0 0
340
341Ltmp21:
342	movabsq	$0x4024000000000000, %rax
343	xorl	%r15d, %r15d
344Ltmp21_br: 	movq	%rax, 0x48(%rsp)
345# FDATA: 1 main #Ltmp21_br# 1 main #Ltmp20# 0 0
346
347Ltmp20:
348	movabsq	$0x4014000000000000, %rdx
349	xorl	%r13d, %r13d
350Ltmp20_br: 	movq	%rdx, 0x40(%rsp)
351# FDATA: 1 main #Ltmp20_br# 1 main #Ltmp19# 0 0
352
353Ltmp19:
354	xorl	%r12d, %r12d
355Ltmp19_br: 	movq	%r14, 0x38(%rsp)
356# FDATA: 1 main #Ltmp19_br# 1 main #Ltmp18# 0 0
357
358Ltmp18:
359	movsd	0x38(%rsp), %xmm3
360	movq	%rbx, %rsi
361	movsd	0x40(%rsp), %xmm2
362	movq	%rbp, %rdi
363	movsd	0x48(%rsp), %xmm1
364	movsd	0x50(%rsp), %xmm0
365	callq	_Z10SolveCubicddddPiPd
366	xorl	%eax, %eax
367	movl	$0x4015d8, %edi
368	callq	printf@PLT
369	movl	0x8c(%rsp), %ecx
370	testl	%ecx, %ecx
371Ltmp18_br: 	jle	Ltmp16
372# FDATA: 1 main #Ltmp18_br# 1 main #Ltmp16# 0 0
373# FDATA: 1 main #Ltmp18_br# 1 main #LFT17# 0 0
374
375LFT17:
376	movq	%rbx, %rcx
377LFT17_br: 	xorl	%edx, %edx
378# FDATA: 1 main #LFT17_br# 1 main #Ltmp17# 0 0
379
380Ltmp17:
381	movsd	(%rcx), %xmm0
382	movl	$0x4015e3, %edi
383	movl	$0x1, %eax
384	movl	%edx, 0x20(%rsp)
385	movq	%rcx, 0x30(%rsp)
386	callq	printf@PLT
387	movl	0x20(%rsp), %edx
388	movq	0x30(%rsp), %rcx
389	addl	$0x1, %edx
390	addq	$0x8, %rcx
391	cmpl	%edx, 0x8c(%rsp)
392Ltmp17_br: 	jg	Ltmp17
393# FDATA: 1 main #Ltmp17_br# 1 main #Ltmp17# 0 0
394# FDATA: 1 main #Ltmp17_br# 1 main #Ltmp16# 0 0
395
396Ltmp16:
397	movl	$0xa, %edi
398	addl	$0x1, %r12d
399	callq	putchar@PLT
400	movsd	0x38(%rsp), %xmm0
401	cmpl	$0x9, %r12d
402	subsd	DATAat0x401718(%rip), %xmm0
403	movsd	%xmm0, 0x38(%rsp)
404Ltmp16_br: 	jne	Ltmp18
405# FDATA: 1 main #Ltmp16_br# 1 main #Ltmp18# 0 0
406# FDATA: 1 main #Ltmp16_br# 1 main #LFT18# 0 0
407
408LFT18:
409	movsd	DATAat0x401720(%rip), %xmm0
410	addl	$0x1, %r13d
411	cmpl	$0x11, %r13d
412	addsd	0x40(%rsp), %xmm0
413	movsd	%xmm0, 0x40(%rsp)
414LFT18_br: 	jne	Ltmp19
415# FDATA: 1 main #LFT18_br# 1 main #Ltmp19# 0 0
416# FDATA: 1 main #LFT18_br# 1 main #LFT19# 0 0
417
418LFT19:
419	movsd	0x48(%rsp), %xmm0
420	addl	$0x1, %r15d
421	cmpl	$0x28, %r15d
422	subsd	DATAat0x401728(%rip), %xmm0
423	movsd	%xmm0, 0x48(%rsp)
424LFT19_br: 	jne	Ltmp20
425# FDATA: 1 main #LFT19_br# 1 main #Ltmp20# 0 0
426# FDATA: 1 main #LFT19_br# 1 main #LFT20# 0 0
427
428LFT20:
429	movsd	DATAat0x401658(%rip), %xmm0
430	addl	$0x1, 0x5c(%rsp)
431	cmpl	$0x9, 0x5c(%rsp)
432	addsd	0x50(%rsp), %xmm0
433	movsd	%xmm0, 0x50(%rsp)
434LFT20_br: 	jne	Ltmp21
435# FDATA: 1 main #LFT20_br# 1 main #Ltmp21# 0 0
436# FDATA: 1 main #LFT20_br# 1 main #LFT21# 0 0
437
438LFT21:
439	leaq	0x80(%rsp), %r12
440	movl	$0x401548, %edi
441	movl	$0xc350, %ebp
442	xorl	%ebx, %ebx
443LFT21_br: 	callq	puts@PLT
444# FDATA: 1 main #LFT21_br# 1 main #Ltmp22# 0 0
445
446Ltmp22:
447	movslq	%ebx, %rdi
448	movq	%r12, %rsi
449	callq	_Z5usqrtmP8int_sqrt
450	movl	0x80(%rsp), %edx
451	movl	%ebx, %esi
452	xorl	%eax, %eax
453	movl	$0x4015f2, %edi
454	addl	$0x2, %ebx
455	callq	printf@PLT
456	subl	$0x1, %ebp
457Ltmp22_br: 	jne	Ltmp22
458# FDATA: 1 main #Ltmp22_br# 1 main #Ltmp22# 0 0
459# FDATA: 1 main #Ltmp22_br# 1 main #LFT22# 0 0
460
461LFT22:
462	movl	$0xa, %edi
463	movl	$0x3fed0169, %ebx
464LFT22_br: 	callq	putchar@PLT
465# FDATA: 1 main #LFT22_br# 1 main #Ltmp23# 0 0
466
467Ltmp23:
468	movq	%rbx, %rdi
469	movq	%r12, %rsi
470	callq	_Z5usqrtmP8int_sqrt
471	movl	0x80(%rsp), %edx
472	movq	%rbx, %rsi
473	xorl	%eax, %eax
474	movl	$0x401603, %edi
475	addq	$0x1, %rbx
476	callq	printf@PLT
477	cmpq	$0x3fed4169, %rbx
478Ltmp23_br: 	jne	Ltmp23
479# FDATA: 1 main #Ltmp23_br# 1 main #Ltmp23# 0 0
480# FDATA: 1 main #Ltmp23_br# 1 main #LFT23# 0 0
481
482LFT23:
483	movl	$0x401570, %edi
484	xorl	%ebx, %ebx
485	callq	puts@PLT
486	movq	%rbx, 0x8(%rsp)
487	movsd	DATAat0x401748(%rip), %xmm3
488LFT23_br: 	movsd	0x8(%rsp), %xmm2
489# FDATA: 1 main #LFT23_br# 1 main #Ltmp24# 0 0
490
491Ltmp24:
492	movsd	DATAat0x401730(%rip), %xmm1
493	movl	$0x401598, %edi
494	movapd	%xmm2, %xmm0
495	movl	$0x2, %eax
496	mulsd	%xmm2, %xmm1
497	movsd	%xmm2, 0x20(%rsp)
498	movsd	%xmm3, 0x10(%rsp)
499	divsd	DATAat0x401738(%rip), %xmm1
500	callq	printf@PLT
501	movsd	0x20(%rsp), %xmm2
502	movsd	0x10(%rsp), %xmm3
503	addsd	DATAat0x401740(%rip), %xmm2
504	ucomisd	%xmm2, %xmm3
505Ltmp24_br: 	jae	Ltmp24
506# FDATA: 1 main #Ltmp24_br# 1 main #Ltmp24# 0 0
507# FDATA: 1 main #Ltmp24_br# 1 main #LFT24# 0 0
508
509LFT24:
510	movl	$0x401612, %edi
511	callq	puts@PLT
512	movq	%rbx, 0x8(%rsp)
513	movsd	DATAat0x401758(%rip), %xmm3
514LFT24_br: 	movsd	0x8(%rsp), %xmm2
515# FDATA: 1 main #LFT24_br# 1 main #Ltmp25# 0 0
516
517Ltmp25:
518	movsd	DATAat0x401738(%rip), %xmm1
519	movl	$0x4015b8, %edi
520	movapd	%xmm2, %xmm0
521	movl	$0x2, %eax
522	mulsd	%xmm2, %xmm1
523	movsd	%xmm2, 0x20(%rsp)
524	movsd	%xmm3, 0x10(%rsp)
525	divsd	DATAat0x401730(%rip), %xmm1
526	callq	printf@PLT
527	movsd	0x20(%rsp), %xmm2
528	movsd	0x10(%rsp), %xmm3
529	addsd	DATAat0x401750(%rip), %xmm2
530	ucomisd	%xmm2, %xmm3
531Ltmp25_br: 	jae	Ltmp25
532# FDATA: 1 main #Ltmp25_br# 1 main #Ltmp25# 0 0
533# FDATA: 1 main #Ltmp25_br# 1 main #LFT25# 0 0
534
535LFT25:
536	addq	$0x98, %rsp
537	.cfi_def_cfa_offset 56
538	xorl	%eax, %eax
539	popq	%rbx
540	.cfi_def_cfa_offset 48
541	popq	%rbp
542	.cfi_def_cfa_offset 40
543	popq	%r12
544	.cfi_def_cfa_offset 32
545	popq	%r13
546	.cfi_def_cfa_offset 24
547	popq	%r14
548	.cfi_def_cfa_offset 16
549	popq	%r15
550	.cfi_def_cfa_offset 8
551	retq
552	.cfi_def_cfa %rsp, 208
553
554LLP0:
555	cmpq	$0x1, %rdx
556	movq	%rax, %rdi
557LLP0_br: 	je	Ltmp26
558# FDATA: 1 main #LLP0_br# 1 main #Ltmp26# 0 0
559# FDATA: 1 main #LLP0_br# 1 main #Ltmp28# 0 0
560
561Ltmp28:
562Ltmp28_br: 	callq	_Unwind_Resume@PLT
563# FDATA: 1 main #Ltmp28_br# 1 main #Ltmp26# 0 0
564
565Ltmp26:
566	callq	__cxa_begin_catch@PLT
567	movl	$0x4015e7, %edi
568	callq	puts@PLT
569	callq	__cxa_end_catch@PLT
570Ltmp26_br: 	jmp	Ltmp27
571# FDATA: 1 main #Ltmp26_br# 1 main #Ltmp27# 0 0
572
573Ltmp30:
574	movq	%rax, 0x30(%rsp)
575	callq	__cxa_end_catch@PLT
576	movq	0x30(%rsp), %rdi
577Ltmp30_br: 	jmp	Ltmp28
578# FDATA: 1 main #Ltmp30_br# 1 main #Ltmp28# 0 0
579
580LLP1:
581	cmpq	$0x1, %rdx
582	movq	%rax, %rdi
583LLP1_br: 	jne	Ltmp28
584# FDATA: 1 main #LLP1_br# 1 main #Ltmp28# 0 0
585# FDATA: 1 main #LLP1_br# 1 main #LFT26# 0 0
586
587LFT26:
588	callq	__cxa_begin_catch@PLT
589	movl	$0x4015e7, %edi
590	callq	puts@PLT
591	callq	__cxa_end_catch@PLT
592LFT26_br: 	jmp	Ltmp29
593# FDATA: 1 main #LFT26_br# 1 main #Ltmp29# 0 0
594
595LLP2:
596LLP2_br: 	jmp	Ltmp30
597# FDATA: 1 main #LLP2_br# 1 main #Ltmp30# 0 0
598
599	.cfi_endproc
600.size main, .-main
601
602.section .rodata
603"DATAat0x401738":
604"DATAat0x401748":
605"DATAat0x401728":
606"DATAat0x401718":
607"DATAat0x4016f8":
608"DATAat0x401690":
609"DATAat0x401668":
610"DATAat0x401650":
611"DATAat0x401700":
612"DATAat0x401698":
613"DATAat0x401688":
614"DATAat0x401648":
615"DATAat0x401680":
616"DATAat0x4016c8":
617"DATAat0x401750":
618"DATAat0x401678":
619"DATAat0x4016c0":
620"DATAat0x401758":
621"DATAat0x401660":
622"DATAat0x4016b0":
623"DATAat0x401640":
624"DATAat0x401658":
625"DATAat0x401720":
626"DATAat0x4016f0":
627"DATAat0x401710":
628"DATAat0x4016a8":
629"DATAat0x401730":
630"DATAat0x4016b8":
631"DATAat0x401708":
632"DATAat0x401670":
633"DATAat0x4016a0":
634"DATAat0x4016d0":
635"DATAat0x4016d8":
636"DATAat0x4016e0":
637"DATAat0x401740":
638"DATAat0x4016e8":
639	.text
640  .globl _Z10SolveCubicddddPiPd
641  .type _Z10SolveCubicddddPiPd, %function
642_Z10SolveCubicddddPiPd:
643# FDATA: 0 [unknown] 0 1 _Z10SolveCubicddddPiPd 0 0 57
644	.cfi_startproc
645LBB01:
646	divsd	%xmm0, %xmm1
647	pushq	%rbx
648	.cfi_def_cfa_offset 16
649	.cfi_offset %rbx, -16
650	movq	%rsi, %rbx
651	subq	$0x70, %rsp
652	.cfi_def_cfa_offset 128
653	divsd	%xmm0, %xmm2
654	movsd	%xmm1, 0x48(%rsp)
655	fldl	0x48(%rsp)
656	divsd	%xmm0, %xmm3
657	movsd	%xmm2, 0x48(%rsp)
658	fldl	0x48(%rsp)
659	fld	%st(1)
660	fmul	%st(2), %st
661	movsd	%xmm3, 0x48(%rsp)
662	fld	%st(1)
663	fmuls	DATAat0x401760(%rip)
664	faddp	%st, %st(1)
665	fdivs	DATAat0x401764(%rip)
666	fld	%st(2)
667	fadd	%st(3), %st
668	fmul	%st(3), %st
669	fmul	%st(3), %st
670	fld	%st(3)
671	fmuls	DATAat0x401768(%rip)
672	fmulp	%st, %st(3)
673	faddp	%st, %st(2)
674	flds	DATAat0x40176c(%rip)
675	fmull	0x48(%rsp)
676	faddp	%st, %st(2)
677	fxch	%st(1)
678	fdivs	DATAat0x401770(%rip)
679	fld	%st(1)
680	fmul	%st(2), %st
681	fmul	%st(2), %st
682	fld	%st(1)
683	fmul	%st(2), %st
684	fsub	%st(1), %st
685	fstpl	0x68(%rsp)
686	movsd	0x68(%rsp), %xmm0
687	ucomisd	DATAat0x401778(%rip), %xmm0
688LBB01_br: 	jbe	Ltmp31
689# FDATA: 1 _Z10SolveCubicddddPiPd #LBB01_br# 1 _Z10SolveCubicddddPiPd #Ltmp31# 0 0
690# FDATA: 1 _Z10SolveCubicddddPiPd #LBB01_br# 1 _Z10SolveCubicddddPiPd #LFT1# 0 0
691
692LFT1:
693	fstp	%st(0)
694LFT1_br: 	jmp	Ltmp32
695# FDATA: 1 _Z10SolveCubicddddPiPd #LFT1_br# 1 _Z10SolveCubicddddPiPd #Ltmp32# 0 0
696
697Ltmp37:
698Ltmp37_br: 	fstp	%st(0)
699# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp37_br# 1 _Z10SolveCubicddddPiPd #Ltmp32# 0 0
700
701Ltmp32:
702	sqrtsd	%xmm0, %xmm1
703	movl	$0x1, (%rdi)
704	ucomisd	%xmm1, %xmm1
705Ltmp32_br: 	jp	Ltmp33
706# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp32_br# 1 _Z10SolveCubicddddPiPd #Ltmp33# 0 0
707# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp32_br# 1 _Z10SolveCubicddddPiPd #LFT3# 0 0
708
709LFT3:
710LFT3_br: 	jne	Ltmp33
711# FDATA: 1 _Z10SolveCubicddddPiPd #LFT3_br# 1 _Z10SolveCubicddddPiPd #Ltmp33# 0 0
712# FDATA: 1 _Z10SolveCubicddddPiPd #LFT3_br# 1 _Z10SolveCubicddddPiPd #Ltmp36# 0 0
713
714Ltmp36:
715	fstl	0x68(%rsp)
716	movsd	DATAat0x4017b0(%rip), %xmm2
717	fstpt	0x30(%rsp)
718	fxch	%st(1)
719	movsd	0x68(%rsp), %xmm0
720	fstpt	0x10(%rsp)
721	andpd	%xmm2, %xmm0
722	fstpt	0x20(%rsp)
723	addsd	%xmm1, %xmm0
724	movsd	DATAat0x401798(%rip), %xmm1
725	callq	pow@PLT
726	movsd	%xmm0, 0x8(%rsp)
727	fldl	0x8(%rsp)
728	fldz
729	fldt	0x30(%rsp)
730	fxch	%st(1)
731	fucompi	%st(1), %st
732	fstp	%st(0)
733	fldt	0x10(%rsp)
734	fldt	0x20(%rsp)
735Ltmp36_br: 	ja	Ltmp34
736# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp36_br# 1 _Z10SolveCubicddddPiPd #Ltmp34# 0 0
737# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp36_br# 1 _Z10SolveCubicddddPiPd #LFT5# 0 0
738
739LFT5:
740LFT5_br: 	movsd	DATAat0x4017a0(%rip), %xmm1
741# FDATA: 1 _Z10SolveCubicddddPiPd #LFT5_br# 1 _Z10SolveCubicddddPiPd #Ltmp35# 0 0
742
743Ltmp35:
744	fdiv	%st(2), %st
745	faddp	%st, %st(2)
746	fxch	%st(1)
747	fstpl	0x68(%rsp)
748	fdivs	DATAat0x401760(%rip)
749	movsd	0x68(%rsp), %xmm0
750	mulsd	%xmm1, %xmm0
751	movsd	%xmm0, 0x8(%rsp)
752	fldl	0x8(%rsp)
753	faddp	%st, %st(1)
754	fstpl	(%rbx)
755	addq	$0x70, %rsp
756	.cfi_def_cfa_offset 16
757	popq	%rbx
758	.cfi_def_cfa_offset 8
759	retq
760	.cfi_def_cfa %rsp, 128
761
762Ltmp34:
763	movsd	DATAat0x401658(%rip), %xmm1
764Ltmp34_br: 	jmp	Ltmp35
765# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp34_br# 1 _Z10SolveCubicddddPiPd #Ltmp35# 0 0
766
767Ltmp33:
768	fstpt	0x30(%rsp)
769	fxch	%st(1)
770	fstpt	0x10(%rsp)
771	fstpt	0x20(%rsp)
772	callq	sqrt@PLT
773	movapd	%xmm0, %xmm1
774	fldt	0x20(%rsp)
775	fldt	0x10(%rsp)
776	fldt	0x30(%rsp)
777	fxch	%st(1)
778	fxch	%st(2)
779	fxch	%st(1)
780Ltmp33_br: 	jmp	Ltmp36
781# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp33_br# 1 _Z10SolveCubicddddPiPd #Ltmp36# 0 0
782
783Ltmp31:
784Ltmp31_br: 	jp	Ltmp37
785# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp31_br# 1 _Z10SolveCubicddddPiPd #Ltmp37# 0 0
786# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp31_br# 1 _Z10SolveCubicddddPiPd #LFT7# 0 0
787
788LFT7:
789	fstpl	0x68(%rsp)
790	movl	$0x3, (%rdi)
791	movsd	0x68(%rsp), %xmm1
792	sqrtsd	%xmm1, %xmm0
793	ucomisd	%xmm0, %xmm0
794LFT7_br: 	jp	Ltmp38
795# FDATA: 1 _Z10SolveCubicddddPiPd #LFT7_br# 1 _Z10SolveCubicddddPiPd #Ltmp38# 0 0
796# FDATA: 1 _Z10SolveCubicddddPiPd #LFT7_br# 1 _Z10SolveCubicddddPiPd #LFT8# 0 0
797
798LFT8:
799LFT8_br: 	jne	Ltmp38
800# FDATA: 1 _Z10SolveCubicddddPiPd #LFT8_br# 1 _Z10SolveCubicddddPiPd #Ltmp38# 0 0
801# FDATA: 1 _Z10SolveCubicddddPiPd #LFT8_br# 1 _Z10SolveCubicddddPiPd #Ltmp47# 0 0
802
803Ltmp47:
804	movsd	%xmm0, 0x8(%rsp)
805	fldl	0x8(%rsp)
806	fdivrp	%st, %st(1)
807	fstpl	0x68(%rsp)
808	fxch	%st(1)
809	fstpt	0x10(%rsp)
810	movsd	0x68(%rsp), %xmm0
811	fstpt	0x20(%rsp)
812	callq	acos@PLT
813	movsd	%xmm0, 0x48(%rsp)
814	fldt	0x20(%rsp)
815	fstpl	0x60(%rsp)
816	sqrtsd	0x60(%rsp), %xmm1
817	movapd	%xmm1, %xmm2
818	ucomisd	%xmm1, %xmm1
819	fldt	0x10(%rsp)
820Ltmp47_br: 	jp	Ltmp39
821# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp47_br# 1 _Z10SolveCubicddddPiPd #Ltmp39# 0 0
822# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp47_br# 1 _Z10SolveCubicddddPiPd #LFT10# 0 0
823
824LFT10:
825LFT10_br: 	jne	Ltmp40
826# FDATA: 1 _Z10SolveCubicddddPiPd #LFT10_br# 1 _Z10SolveCubicddddPiPd #Ltmp40# 0 0
827# FDATA: 1 _Z10SolveCubicddddPiPd #LFT10_br# 1 _Z10SolveCubicddddPiPd #Ltmp46# 0 0
828
829Ltmp46:
830	divsd	DATAat0x4016b0(%rip), %xmm0
831	movsd	%xmm1, 0x20(%rsp)
832	movsd	%xmm2, 0x30(%rsp)
833	fstpt	0x10(%rsp)
834	callq	cos@PLT
835	movsd	0x30(%rsp), %xmm2
836	movsd	0x20(%rsp), %xmm1
837	fldt	0x10(%rsp)
838	ucomisd	%xmm1, %xmm1
839	mulsd	DATAat0x401780(%rip), %xmm2
840	fdivs	DATAat0x401760(%rip)
841	mulsd	%xmm0, %xmm2
842	movsd	%xmm2, 0x8(%rsp)
843	movapd	%xmm1, %xmm2
844	fld	%st(0)
845	fstpt	0x50(%rsp)
846	fldl	0x8(%rsp)
847	faddp	%st, %st(1)
848	fstpl	(%rbx)
849Ltmp46_br: 	jp	Ltmp41
850# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp46_br# 1 _Z10SolveCubicddddPiPd #Ltmp41# 0 0
851# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp46_br# 1 _Z10SolveCubicddddPiPd #LFT12# 0 0
852
853LFT12:
854LFT12_br: 	jne	Ltmp41
855# FDATA: 1 _Z10SolveCubicddddPiPd #LFT12_br# 1 _Z10SolveCubicddddPiPd #Ltmp41# 0 0
856# FDATA: 1 _Z10SolveCubicddddPiPd #LFT12_br# 1 _Z10SolveCubicddddPiPd #Ltmp44# 0 0
857
858Ltmp44:
859	movsd	0x48(%rsp), %xmm0
860	movsd	%xmm1, 0x20(%rsp)
861	addsd	DATAat0x401788(%rip), %xmm0
862	movsd	%xmm2, 0x30(%rsp)
863	divsd	DATAat0x4016b0(%rip), %xmm0
864	callq	cos@PLT
865	movsd	0x30(%rsp), %xmm2
866	fldt	0x50(%rsp)
867	mulsd	DATAat0x401780(%rip), %xmm2
868	movsd	0x20(%rsp), %xmm1
869	ucomisd	%xmm1, %xmm1
870	mulsd	%xmm0, %xmm2
871	movsd	%xmm2, 0x8(%rsp)
872	fldl	0x8(%rsp)
873	faddp	%st, %st(1)
874	fstpl	0x8(%rbx)
875Ltmp44_br: 	jp	Ltmp42
876# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp44_br# 1 _Z10SolveCubicddddPiPd #Ltmp42# 0 0
877# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp44_br# 1 _Z10SolveCubicddddPiPd #LFT14# 0 0
878
879LFT14:
880LFT14_br: 	jne	Ltmp42
881# FDATA: 1 _Z10SolveCubicddddPiPd #LFT14_br# 1 _Z10SolveCubicddddPiPd #Ltmp42# 0 0
882# FDATA: 1 _Z10SolveCubicddddPiPd #LFT14_br# 1 _Z10SolveCubicddddPiPd #Ltmp43# 0 0
883
884Ltmp43:
885	movsd	0x48(%rsp), %xmm0
886	movsd	%xmm1, 0x20(%rsp)
887	addsd	DATAat0x401790(%rip), %xmm0
888	divsd	DATAat0x4016b0(%rip), %xmm0
889	callq	cos@PLT
890	fldt	0x50(%rsp)
891	movsd	DATAat0x401780(%rip), %xmm2
892	movsd	0x20(%rsp), %xmm1
893	mulsd	%xmm1, %xmm2
894	mulsd	%xmm0, %xmm2
895	movsd	%xmm2, 0x8(%rsp)
896	fldl	0x8(%rsp)
897	faddp	%st, %st(1)
898	fstpl	0x10(%rbx)
899	addq	$0x70, %rsp
900	.cfi_def_cfa_offset 16
901	popq	%rbx
902	.cfi_def_cfa_offset 8
903	retq
904	.cfi_def_cfa %rsp, 128
905
906Ltmp42:
907	movsd	0x60(%rsp), %xmm0
908	callq	sqrt@PLT
909	movapd	%xmm0, %xmm1
910Ltmp42_br: 	jmp	Ltmp43
911# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp42_br# 1 _Z10SolveCubicddddPiPd #Ltmp43# 0 0
912
913Ltmp41:
914	movsd	0x60(%rsp), %xmm0
915	callq	sqrt@PLT
916	movsd	0x20(%rsp), %xmm1
917	movapd	%xmm0, %xmm2
918Ltmp41_br: 	jmp	Ltmp44
919# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp41_br# 1 _Z10SolveCubicddddPiPd #Ltmp44# 0 0
920
921Ltmp39:
922	fstp	%st(0)
923Ltmp39_br: 	jmp	Ltmp45
924# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp39_br# 1 _Z10SolveCubicddddPiPd #Ltmp45# 0 0
925
926Ltmp40:
927Ltmp40_br: 	fstp	%st(0)
928# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp40_br# 1 _Z10SolveCubicddddPiPd #Ltmp45# 0 0
929
930Ltmp45:
931	movsd	0x60(%rsp), %xmm0
932	movsd	%xmm1, 0x20(%rsp)
933	callq	sqrt@PLT
934	movsd	0x20(%rsp), %xmm1
935	movapd	%xmm0, %xmm2
936	movsd	0x48(%rsp), %xmm0
937	fldt	0x10(%rsp)
938Ltmp45_br: 	jmp	Ltmp46
939# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp45_br# 1 _Z10SolveCubicddddPiPd #Ltmp46# 0 0
940
941Ltmp38:
942	fstpt	0x30(%rsp)
943	fxch	%st(1)
944	movapd	%xmm1, %xmm0
945	fstpt	0x10(%rsp)
946	fstpt	0x20(%rsp)
947	callq	sqrt@PLT
948	fldt	0x20(%rsp)
949	fldt	0x10(%rsp)
950	fldt	0x30(%rsp)
951	fxch	%st(1)
952	fxch	%st(2)
953	fxch	%st(1)
954Ltmp38_br: 	jmp	Ltmp47
955# FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp38_br# 1 _Z10SolveCubicddddPiPd #Ltmp47# 0 0
956
957	.cfi_endproc
958.size _Z10SolveCubicddddPiPd, .-_Z10SolveCubicddddPiPd
959.section .rodata
960"DATAat0x401788":
961"DATAat0x401790":
962"DATAat0x401780":
963"DATAat0x401770":
964"DATAat0x40176c":
965"DATAat0x401760":
966"DATAat0x401768":
967"DATAat0x401778":
968"DATAat0x401764":
969"DATAat0x401798":
970"DATAat0x4017b0":
971"DATAat0x4017a0":
972
973	.text
974  .globl _Z5usqrtmP8int_sqrt
975  .type _Z5usqrtmP8int_sqrt, %function
976_Z5usqrtmP8int_sqrt:
977# FDATA: 0 [unknown] 0 1 _Z5usqrtmP8int_sqrt 0 0 6
978	.cfi_startproc
979LBB02:
980	xorl	%r9d, %r9d
981	xorl	%eax, %eax
982LBB02_br: 	xorl	%ecx, %ecx
983# FDATA: 1 _Z5usqrtmP8int_sqrt #LBB02_br# 1 _Z5usqrtmP8int_sqrt #Ltmp48# 0 0
984
985Ltmp48:
986	movq	%rdi, %rdx
987	leaq	(%rax,%rax), %r10
988	leaq	0x1(,%rax,4), %r8
989	andl	$0xc0000000, %edx
990	shlq	$0x2, %rdi
991	shrq	$0x1e, %rdx
992	leaq	0x1(%r10), %rax
993	leaq	(%rdx,%rcx,4), %rdx
994	movq	%rdx, %rcx
995	subq	%r8, %rcx
996	cmpq	%r8, %rdx
997	cmovbq	%rdx, %rcx
998	cmovbq	%r10, %rax
999	addl	$0x1, %r9d
1000	cmpl	$0x20, %r9d
1001Ltmp48_br: 	jne	Ltmp48
1002# FDATA: 1 _Z5usqrtmP8int_sqrt #Ltmp48_br# 1 _Z5usqrtmP8int_sqrt #Ltmp48# 0 0
1003# FDATA: 1 _Z5usqrtmP8int_sqrt #Ltmp48_br# 1 _Z5usqrtmP8int_sqrt #LFT0# 0 0
1004
1005LFT0:
1006	movq	%rax, (%rsi)
1007	retq
1008
1009	.cfi_endproc
1010.size _Z5usqrtmP8int_sqrt, .-_Z5usqrtmP8int_sqrt
1011