## Check that llvm-bolt is able to read a file with DWARF Exception CFI ## information and fix CFI information after reordering. # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o # RUN: llvm-strip --strip-unneeded %t.o # RUN: %clang %cflags -fpic -shared -xc /dev/null -o %t.so ## Link against a DSO to ensure PLT entries. # RUN: %clangxx %cflags %t.o %t.so -o %t.exe # RUN: llvm-bolt %t.exe -o %t --reorder-blocks=cache --print-after-lowering \ # RUN: --print-only=_Z10SolveCubicddddPiPd 2>&1 | FileCheck %s # # Entry BB # CHECK: divsd %xmm0, %xmm1 # CHECK: pushq %rbx # CHECK: !CFI $0 ; OpDefCfaOffset # CHECK: !CFI $1 ; OpOffset # CHECK: movq %rsi, %rbx # CHECK: subq $0x70, %rsp # CHECK: !CFI $2 ; OpDefCfaOffset # CHECK: divsd %xmm0, %xmm2 # Duplicated tail # CHECK: addq $0x70, %rsp # CHECK: !CFI $3 ; OpDefCfaOffset # CHECK: popq %rbx # CHECK: !CFI $4 ; OpDefCfaOffset # CHECK: retq # CHECK: !CFI {{.*}} ; OpDefCfa # Epilogue rescheduled to the middle of the function # CHECK: addq $0x70, %rsp # CHECK: !CFI $6 ; OpDefCfaOffset # CHECK: popq %rbx # CHECK: !CFI $7 ; OpDefCfaOffset # CHECK: retq # CHECK: !CFI {{.*}} ; OpDefCfa .text .globl main .type main, %function main: # FDATA: 0 [unknown] 0 1 main 0 0 0 .cfi_startproc LBB00: pushq %r15 .cfi_def_cfa_offset 16 .cfi_offset %r15, -16 movl $0x401520, %edi pushq %r14 .cfi_def_cfa_offset 24 .cfi_offset %r14, -24 pushq %r13 .cfi_def_cfa_offset 32 .cfi_offset %r13, -32 pushq %r12 .cfi_def_cfa_offset 40 .cfi_offset %r12, -40 xorl %r12d, %r12d pushq %rbp .cfi_def_cfa_offset 48 .cfi_offset %rbp, -48 pushq %rbx .cfi_def_cfa_offset 56 .cfi_offset %rbx, -56 subq $0x98, %rsp .cfi_def_cfa_offset 208 leaq 0x60(%rsp), %rbx leaq 0x8c(%rsp), %rbp callq puts@PLT movsd DATAat0x401640(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x401648(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x401650(%rip), %xmm1 movq %rbx, %r13 movsd DATAat0x401658(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT LBB00_br: jmp Ltmp0 # FDATA: 1 main #LBB00_br# 1 main #Ltmp0# 0 0 Ltmp1: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp1_br: callq printf@PLT # FDATA: 1 main #Ltmp1_br# 1 main #Ltmp0# 0 0 Ltmp0: cmpl 0x8c(%rsp), %r12d Ltmp0_br: jl Ltmp1 # FDATA: 1 main #Ltmp0_br# 1 main #Ltmp1# 0 0 # FDATA: 1 main #Ltmp0_br# 1 main #LFT2# 0 0 LFT2: movl $0xa, %edi movq %rbx, %r13 xorl %r12d, %r12d callq putchar@PLT movsd DATAat0x401640(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x401660(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x401668(%rip), %xmm1 movsd DATAat0x401658(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT LFT2_br: jmp Ltmp2 # FDATA: 1 main #LFT2_br# 1 main #Ltmp2# 0 0 Ltmp3: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp3_br: callq printf@PLT # FDATA: 1 main #Ltmp3_br# 1 main #Ltmp2# 0 0 Ltmp2: cmpl 0x8c(%rsp), %r12d Ltmp2_br: jl Ltmp3 # FDATA: 1 main #Ltmp2_br# 1 main #Ltmp3# 0 0 # FDATA: 1 main #Ltmp2_br# 1 main #LFT4# 0 0 LFT4: movl $0xa, %edi callq putchar@PLT movsd DATAat0x401670(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x401678(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x401680(%rip), %xmm1 movsd DATAat0x401658(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT movq %rbx, %r12 xorl %r13d, %r13d LFT4_br: jmp Ltmp4 # FDATA: 1 main #LFT4_br# 1 main #Ltmp4# 0 0 Ltmp5: movsd (%r12), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax callq printf@PLT addl $0x1, %r13d Ltmp5_br: addq $0x8, %r12 # FDATA: 1 main #Ltmp5_br# 1 main #Ltmp4# 0 0 Ltmp4: cmpl 0x8c(%rsp), %r13d Ltmp4_br: jl Ltmp5 # FDATA: 1 main #Ltmp4_br# 1 main #Ltmp5# 0 0 # FDATA: 1 main #Ltmp4_br# 1 main #LFT6# 0 0 LFT6: movl $0xa, %edi LFT6_br: callq putchar@PLT # FDATA: 1 main #LFT6_br# 1 main #Ltmp27# 0 0 Ltmp27: movsd DATAat0x401658(%rip), %xmm2 movq %rbx, %rsi movsd DATAat0x401688(%rip), %xmm3 movq %rbp, %rdi movsd DATAat0x401690(%rip), %xmm1 movq %rbx, %r13 movapd %xmm2, %xmm0 xorl %r12d, %r12d callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT Ltmp27_br: jmp Ltmp6 # FDATA: 1 main #Ltmp27_br# 1 main #Ltmp6# 0 0 Ltmp7: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp7_br: callq printf@PLT # FDATA: 1 main #Ltmp7_br# 1 main #Ltmp6# 0 0 Ltmp6: cmpl 0x8c(%rsp), %r12d Ltmp6_br: jl Ltmp7 # FDATA: 1 main #Ltmp6_br# 1 main #Ltmp7# 0 0 # FDATA: 1 main #Ltmp6_br# 1 main #LFT9# 0 0 LFT9: movl $0xa, %edi movq %rbx, %r13 xorl %r12d, %r12d callq putchar@PLT movsd DATAat0x401698(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x4016a0(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x4016a8(%rip), %xmm1 movsd DATAat0x4016b0(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT LFT9_br: jmp Ltmp8 # FDATA: 1 main #LFT9_br# 1 main #Ltmp8# 0 0 Ltmp9: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp9_br: callq printf@PLT # FDATA: 1 main #Ltmp9_br# 1 main #Ltmp8# 0 0 Ltmp8: cmpl 0x8c(%rsp), %r12d Ltmp8_br: jl Ltmp9 # FDATA: 1 main #Ltmp8_br# 1 main #Ltmp9# 0 0 # FDATA: 1 main #Ltmp8_br# 1 main #LFT11# 0 0 LFT11: movl $0xa, %edi movq %rbx, %r13 xorl %r12d, %r12d callq putchar@PLT movsd DATAat0x4016b8(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x4016c0(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x4016c8(%rip), %xmm1 movsd DATAat0x4016d0(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT LFT11_br: jmp Ltmp10 # FDATA: 1 main #LFT11_br# 1 main #Ltmp10# 0 0 Ltmp11: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp11_br: callq printf@PLT # FDATA: 1 main #Ltmp11_br# 1 main #Ltmp10# 0 0 Ltmp10: cmpl 0x8c(%rsp), %r12d Ltmp10_br: jl Ltmp11 # FDATA: 1 main #Ltmp10_br# 1 main #Ltmp11# 0 0 # FDATA: 1 main #Ltmp10_br# 1 main #LFT13# 0 0 LFT13: movl $0xa, %edi callq putchar@PLT movsd DATAat0x4016d8(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x4016e0(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x4016e8(%rip), %xmm1 movsd DATAat0x4016f0(%rip), %xmm0 callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT movq %rbx, %r12 xorl %r13d, %r13d LFT13_br: jmp Ltmp12 # FDATA: 1 main #LFT13_br# 1 main #Ltmp12# 0 0 Ltmp13: movsd (%r12), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax callq printf@PLT addl $0x1, %r13d Ltmp13_br: addq $0x8, %r12 # FDATA: 1 main #Ltmp13_br# 1 main #Ltmp12# 0 0 Ltmp12: cmpl 0x8c(%rsp), %r13d Ltmp12_br: jl Ltmp13 # FDATA: 1 main #Ltmp12_br# 1 main #Ltmp13# 0 0 # FDATA: 1 main #Ltmp12_br# 1 main #LFT15# 0 0 LFT15: movl $0xa, %edi LFT15_br: callq putchar@PLT # FDATA: 1 main #LFT15_br# 1 main #Ltmp29# 0 0 Ltmp29: movsd DATAat0x4016f8(%rip), %xmm3 movq %rbx, %rsi movsd DATAat0x401700(%rip), %xmm2 movq %rbp, %rdi movsd DATAat0x401708(%rip), %xmm1 movq %rbx, %r13 movsd DATAat0x401710(%rip), %xmm0 xorl %r12d, %r12d callq _Z10SolveCubicddddPiPd movl $0x4015d8, %edi xorl %eax, %eax callq printf@PLT Ltmp29_br: jmp Ltmp14 # FDATA: 1 main #Ltmp29_br# 1 main #Ltmp14# 0 0 Ltmp15: movsd (%r13), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax addl $0x1, %r12d addq $0x8, %r13 Ltmp15_br: callq printf@PLT # FDATA: 1 main #Ltmp15_br# 1 main #Ltmp14# 0 0 Ltmp14: cmpl 0x8c(%rsp), %r12d Ltmp14_br: jl Ltmp15 # FDATA: 1 main #Ltmp14_br# 1 main #Ltmp15# 0 0 # FDATA: 1 main #Ltmp14_br# 1 main #LFT16# 0 0 LFT16: movl $0xa, %edi movabsq $-0x4010000000000000, %r14 callq putchar@PLT movabsq $0x3ff0000000000000, %rsi movl $0x0, 0x5c(%rsp) LFT16_br: movq %rsi, 0x50(%rsp) # FDATA: 1 main #LFT16_br# 1 main #Ltmp21# 0 0 Ltmp21: movabsq $0x4024000000000000, %rax xorl %r15d, %r15d Ltmp21_br: movq %rax, 0x48(%rsp) # FDATA: 1 main #Ltmp21_br# 1 main #Ltmp20# 0 0 Ltmp20: movabsq $0x4014000000000000, %rdx xorl %r13d, %r13d Ltmp20_br: movq %rdx, 0x40(%rsp) # FDATA: 1 main #Ltmp20_br# 1 main #Ltmp19# 0 0 Ltmp19: xorl %r12d, %r12d Ltmp19_br: movq %r14, 0x38(%rsp) # FDATA: 1 main #Ltmp19_br# 1 main #Ltmp18# 0 0 Ltmp18: movsd 0x38(%rsp), %xmm3 movq %rbx, %rsi movsd 0x40(%rsp), %xmm2 movq %rbp, %rdi movsd 0x48(%rsp), %xmm1 movsd 0x50(%rsp), %xmm0 callq _Z10SolveCubicddddPiPd xorl %eax, %eax movl $0x4015d8, %edi callq printf@PLT movl 0x8c(%rsp), %ecx testl %ecx, %ecx Ltmp18_br: jle Ltmp16 # FDATA: 1 main #Ltmp18_br# 1 main #Ltmp16# 0 0 # FDATA: 1 main #Ltmp18_br# 1 main #LFT17# 0 0 LFT17: movq %rbx, %rcx LFT17_br: xorl %edx, %edx # FDATA: 1 main #LFT17_br# 1 main #Ltmp17# 0 0 Ltmp17: movsd (%rcx), %xmm0 movl $0x4015e3, %edi movl $0x1, %eax movl %edx, 0x20(%rsp) movq %rcx, 0x30(%rsp) callq printf@PLT movl 0x20(%rsp), %edx movq 0x30(%rsp), %rcx addl $0x1, %edx addq $0x8, %rcx cmpl %edx, 0x8c(%rsp) Ltmp17_br: jg Ltmp17 # FDATA: 1 main #Ltmp17_br# 1 main #Ltmp17# 0 0 # FDATA: 1 main #Ltmp17_br# 1 main #Ltmp16# 0 0 Ltmp16: movl $0xa, %edi addl $0x1, %r12d callq putchar@PLT movsd 0x38(%rsp), %xmm0 cmpl $0x9, %r12d subsd DATAat0x401718(%rip), %xmm0 movsd %xmm0, 0x38(%rsp) Ltmp16_br: jne Ltmp18 # FDATA: 1 main #Ltmp16_br# 1 main #Ltmp18# 0 0 # FDATA: 1 main #Ltmp16_br# 1 main #LFT18# 0 0 LFT18: movsd DATAat0x401720(%rip), %xmm0 addl $0x1, %r13d cmpl $0x11, %r13d addsd 0x40(%rsp), %xmm0 movsd %xmm0, 0x40(%rsp) LFT18_br: jne Ltmp19 # FDATA: 1 main #LFT18_br# 1 main #Ltmp19# 0 0 # FDATA: 1 main #LFT18_br# 1 main #LFT19# 0 0 LFT19: movsd 0x48(%rsp), %xmm0 addl $0x1, %r15d cmpl $0x28, %r15d subsd DATAat0x401728(%rip), %xmm0 movsd %xmm0, 0x48(%rsp) LFT19_br: jne Ltmp20 # FDATA: 1 main #LFT19_br# 1 main #Ltmp20# 0 0 # FDATA: 1 main #LFT19_br# 1 main #LFT20# 0 0 LFT20: movsd DATAat0x401658(%rip), %xmm0 addl $0x1, 0x5c(%rsp) cmpl $0x9, 0x5c(%rsp) addsd 0x50(%rsp), %xmm0 movsd %xmm0, 0x50(%rsp) LFT20_br: jne Ltmp21 # FDATA: 1 main #LFT20_br# 1 main #Ltmp21# 0 0 # FDATA: 1 main #LFT20_br# 1 main #LFT21# 0 0 LFT21: leaq 0x80(%rsp), %r12 movl $0x401548, %edi movl $0xc350, %ebp xorl %ebx, %ebx LFT21_br: callq puts@PLT # FDATA: 1 main #LFT21_br# 1 main #Ltmp22# 0 0 Ltmp22: movslq %ebx, %rdi movq %r12, %rsi callq _Z5usqrtmP8int_sqrt movl 0x80(%rsp), %edx movl %ebx, %esi xorl %eax, %eax movl $0x4015f2, %edi addl $0x2, %ebx callq printf@PLT subl $0x1, %ebp Ltmp22_br: jne Ltmp22 # FDATA: 1 main #Ltmp22_br# 1 main #Ltmp22# 0 0 # FDATA: 1 main #Ltmp22_br# 1 main #LFT22# 0 0 LFT22: movl $0xa, %edi movl $0x3fed0169, %ebx LFT22_br: callq putchar@PLT # FDATA: 1 main #LFT22_br# 1 main #Ltmp23# 0 0 Ltmp23: movq %rbx, %rdi movq %r12, %rsi callq _Z5usqrtmP8int_sqrt movl 0x80(%rsp), %edx movq %rbx, %rsi xorl %eax, %eax movl $0x401603, %edi addq $0x1, %rbx callq printf@PLT cmpq $0x3fed4169, %rbx Ltmp23_br: jne Ltmp23 # FDATA: 1 main #Ltmp23_br# 1 main #Ltmp23# 0 0 # FDATA: 1 main #Ltmp23_br# 1 main #LFT23# 0 0 LFT23: movl $0x401570, %edi xorl %ebx, %ebx callq puts@PLT movq %rbx, 0x8(%rsp) movsd DATAat0x401748(%rip), %xmm3 LFT23_br: movsd 0x8(%rsp), %xmm2 # FDATA: 1 main #LFT23_br# 1 main #Ltmp24# 0 0 Ltmp24: movsd DATAat0x401730(%rip), %xmm1 movl $0x401598, %edi movapd %xmm2, %xmm0 movl $0x2, %eax mulsd %xmm2, %xmm1 movsd %xmm2, 0x20(%rsp) movsd %xmm3, 0x10(%rsp) divsd DATAat0x401738(%rip), %xmm1 callq printf@PLT movsd 0x20(%rsp), %xmm2 movsd 0x10(%rsp), %xmm3 addsd DATAat0x401740(%rip), %xmm2 ucomisd %xmm2, %xmm3 Ltmp24_br: jae Ltmp24 # FDATA: 1 main #Ltmp24_br# 1 main #Ltmp24# 0 0 # FDATA: 1 main #Ltmp24_br# 1 main #LFT24# 0 0 LFT24: movl $0x401612, %edi callq puts@PLT movq %rbx, 0x8(%rsp) movsd DATAat0x401758(%rip), %xmm3 LFT24_br: movsd 0x8(%rsp), %xmm2 # FDATA: 1 main #LFT24_br# 1 main #Ltmp25# 0 0 Ltmp25: movsd DATAat0x401738(%rip), %xmm1 movl $0x4015b8, %edi movapd %xmm2, %xmm0 movl $0x2, %eax mulsd %xmm2, %xmm1 movsd %xmm2, 0x20(%rsp) movsd %xmm3, 0x10(%rsp) divsd DATAat0x401730(%rip), %xmm1 callq printf@PLT movsd 0x20(%rsp), %xmm2 movsd 0x10(%rsp), %xmm3 addsd DATAat0x401750(%rip), %xmm2 ucomisd %xmm2, %xmm3 Ltmp25_br: jae Ltmp25 # FDATA: 1 main #Ltmp25_br# 1 main #Ltmp25# 0 0 # FDATA: 1 main #Ltmp25_br# 1 main #LFT25# 0 0 LFT25: addq $0x98, %rsp .cfi_def_cfa_offset 56 xorl %eax, %eax popq %rbx .cfi_def_cfa_offset 48 popq %rbp .cfi_def_cfa_offset 40 popq %r12 .cfi_def_cfa_offset 32 popq %r13 .cfi_def_cfa_offset 24 popq %r14 .cfi_def_cfa_offset 16 popq %r15 .cfi_def_cfa_offset 8 retq .cfi_def_cfa %rsp, 208 LLP0: cmpq $0x1, %rdx movq %rax, %rdi LLP0_br: je Ltmp26 # FDATA: 1 main #LLP0_br# 1 main #Ltmp26# 0 0 # FDATA: 1 main #LLP0_br# 1 main #Ltmp28# 0 0 Ltmp28: Ltmp28_br: callq _Unwind_Resume@PLT # FDATA: 1 main #Ltmp28_br# 1 main #Ltmp26# 0 0 Ltmp26: callq __cxa_begin_catch@PLT movl $0x4015e7, %edi callq puts@PLT callq __cxa_end_catch@PLT Ltmp26_br: jmp Ltmp27 # FDATA: 1 main #Ltmp26_br# 1 main #Ltmp27# 0 0 Ltmp30: movq %rax, 0x30(%rsp) callq __cxa_end_catch@PLT movq 0x30(%rsp), %rdi Ltmp30_br: jmp Ltmp28 # FDATA: 1 main #Ltmp30_br# 1 main #Ltmp28# 0 0 LLP1: cmpq $0x1, %rdx movq %rax, %rdi LLP1_br: jne Ltmp28 # FDATA: 1 main #LLP1_br# 1 main #Ltmp28# 0 0 # FDATA: 1 main #LLP1_br# 1 main #LFT26# 0 0 LFT26: callq __cxa_begin_catch@PLT movl $0x4015e7, %edi callq puts@PLT callq __cxa_end_catch@PLT LFT26_br: jmp Ltmp29 # FDATA: 1 main #LFT26_br# 1 main #Ltmp29# 0 0 LLP2: LLP2_br: jmp Ltmp30 # FDATA: 1 main #LLP2_br# 1 main #Ltmp30# 0 0 .cfi_endproc .size main, .-main .section .rodata "DATAat0x401738": "DATAat0x401748": "DATAat0x401728": "DATAat0x401718": "DATAat0x4016f8": "DATAat0x401690": "DATAat0x401668": "DATAat0x401650": "DATAat0x401700": "DATAat0x401698": "DATAat0x401688": "DATAat0x401648": "DATAat0x401680": "DATAat0x4016c8": "DATAat0x401750": "DATAat0x401678": "DATAat0x4016c0": "DATAat0x401758": "DATAat0x401660": "DATAat0x4016b0": "DATAat0x401640": "DATAat0x401658": "DATAat0x401720": "DATAat0x4016f0": "DATAat0x401710": "DATAat0x4016a8": "DATAat0x401730": "DATAat0x4016b8": "DATAat0x401708": "DATAat0x401670": "DATAat0x4016a0": "DATAat0x4016d0": "DATAat0x4016d8": "DATAat0x4016e0": "DATAat0x401740": "DATAat0x4016e8": .text .globl _Z10SolveCubicddddPiPd .type _Z10SolveCubicddddPiPd, %function _Z10SolveCubicddddPiPd: # FDATA: 0 [unknown] 0 1 _Z10SolveCubicddddPiPd 0 0 57 .cfi_startproc LBB01: divsd %xmm0, %xmm1 pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset %rbx, -16 movq %rsi, %rbx subq $0x70, %rsp .cfi_def_cfa_offset 128 divsd %xmm0, %xmm2 movsd %xmm1, 0x48(%rsp) fldl 0x48(%rsp) divsd %xmm0, %xmm3 movsd %xmm2, 0x48(%rsp) fldl 0x48(%rsp) fld %st(1) fmul %st(2), %st movsd %xmm3, 0x48(%rsp) fld %st(1) fmuls DATAat0x401760(%rip) faddp %st, %st(1) fdivs DATAat0x401764(%rip) fld %st(2) fadd %st(3), %st fmul %st(3), %st fmul %st(3), %st fld %st(3) fmuls DATAat0x401768(%rip) fmulp %st, %st(3) faddp %st, %st(2) flds DATAat0x40176c(%rip) fmull 0x48(%rsp) faddp %st, %st(2) fxch %st(1) fdivs DATAat0x401770(%rip) fld %st(1) fmul %st(2), %st fmul %st(2), %st fld %st(1) fmul %st(2), %st fsub %st(1), %st fstpl 0x68(%rsp) movsd 0x68(%rsp), %xmm0 ucomisd DATAat0x401778(%rip), %xmm0 LBB01_br: jbe Ltmp31 # FDATA: 1 _Z10SolveCubicddddPiPd #LBB01_br# 1 _Z10SolveCubicddddPiPd #Ltmp31# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LBB01_br# 1 _Z10SolveCubicddddPiPd #LFT1# 0 0 LFT1: fstp %st(0) LFT1_br: jmp Ltmp32 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT1_br# 1 _Z10SolveCubicddddPiPd #Ltmp32# 0 0 Ltmp37: Ltmp37_br: fstp %st(0) # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp37_br# 1 _Z10SolveCubicddddPiPd #Ltmp32# 0 0 Ltmp32: sqrtsd %xmm0, %xmm1 movl $0x1, (%rdi) ucomisd %xmm1, %xmm1 Ltmp32_br: jp Ltmp33 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp32_br# 1 _Z10SolveCubicddddPiPd #Ltmp33# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp32_br# 1 _Z10SolveCubicddddPiPd #LFT3# 0 0 LFT3: LFT3_br: jne Ltmp33 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT3_br# 1 _Z10SolveCubicddddPiPd #Ltmp33# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT3_br# 1 _Z10SolveCubicddddPiPd #Ltmp36# 0 0 Ltmp36: fstl 0x68(%rsp) movsd DATAat0x4017b0(%rip), %xmm2 fstpt 0x30(%rsp) fxch %st(1) movsd 0x68(%rsp), %xmm0 fstpt 0x10(%rsp) andpd %xmm2, %xmm0 fstpt 0x20(%rsp) addsd %xmm1, %xmm0 movsd DATAat0x401798(%rip), %xmm1 callq pow@PLT movsd %xmm0, 0x8(%rsp) fldl 0x8(%rsp) fldz fldt 0x30(%rsp) fxch %st(1) fucompi %st(1), %st fstp %st(0) fldt 0x10(%rsp) fldt 0x20(%rsp) Ltmp36_br: ja Ltmp34 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp36_br# 1 _Z10SolveCubicddddPiPd #Ltmp34# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp36_br# 1 _Z10SolveCubicddddPiPd #LFT5# 0 0 LFT5: LFT5_br: movsd DATAat0x4017a0(%rip), %xmm1 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT5_br# 1 _Z10SolveCubicddddPiPd #Ltmp35# 0 0 Ltmp35: fdiv %st(2), %st faddp %st, %st(2) fxch %st(1) fstpl 0x68(%rsp) fdivs DATAat0x401760(%rip) movsd 0x68(%rsp), %xmm0 mulsd %xmm1, %xmm0 movsd %xmm0, 0x8(%rsp) fldl 0x8(%rsp) faddp %st, %st(1) fstpl (%rbx) addq $0x70, %rsp .cfi_def_cfa_offset 16 popq %rbx .cfi_def_cfa_offset 8 retq .cfi_def_cfa %rsp, 128 Ltmp34: movsd DATAat0x401658(%rip), %xmm1 Ltmp34_br: jmp Ltmp35 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp34_br# 1 _Z10SolveCubicddddPiPd #Ltmp35# 0 0 Ltmp33: fstpt 0x30(%rsp) fxch %st(1) fstpt 0x10(%rsp) fstpt 0x20(%rsp) callq sqrt@PLT movapd %xmm0, %xmm1 fldt 0x20(%rsp) fldt 0x10(%rsp) fldt 0x30(%rsp) fxch %st(1) fxch %st(2) fxch %st(1) Ltmp33_br: jmp Ltmp36 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp33_br# 1 _Z10SolveCubicddddPiPd #Ltmp36# 0 0 Ltmp31: Ltmp31_br: jp Ltmp37 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp31_br# 1 _Z10SolveCubicddddPiPd #Ltmp37# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp31_br# 1 _Z10SolveCubicddddPiPd #LFT7# 0 0 LFT7: fstpl 0x68(%rsp) movl $0x3, (%rdi) movsd 0x68(%rsp), %xmm1 sqrtsd %xmm1, %xmm0 ucomisd %xmm0, %xmm0 LFT7_br: jp Ltmp38 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT7_br# 1 _Z10SolveCubicddddPiPd #Ltmp38# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT7_br# 1 _Z10SolveCubicddddPiPd #LFT8# 0 0 LFT8: LFT8_br: jne Ltmp38 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT8_br# 1 _Z10SolveCubicddddPiPd #Ltmp38# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT8_br# 1 _Z10SolveCubicddddPiPd #Ltmp47# 0 0 Ltmp47: movsd %xmm0, 0x8(%rsp) fldl 0x8(%rsp) fdivrp %st, %st(1) fstpl 0x68(%rsp) fxch %st(1) fstpt 0x10(%rsp) movsd 0x68(%rsp), %xmm0 fstpt 0x20(%rsp) callq acos@PLT movsd %xmm0, 0x48(%rsp) fldt 0x20(%rsp) fstpl 0x60(%rsp) sqrtsd 0x60(%rsp), %xmm1 movapd %xmm1, %xmm2 ucomisd %xmm1, %xmm1 fldt 0x10(%rsp) Ltmp47_br: jp Ltmp39 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp47_br# 1 _Z10SolveCubicddddPiPd #Ltmp39# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp47_br# 1 _Z10SolveCubicddddPiPd #LFT10# 0 0 LFT10: LFT10_br: jne Ltmp40 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT10_br# 1 _Z10SolveCubicddddPiPd #Ltmp40# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT10_br# 1 _Z10SolveCubicddddPiPd #Ltmp46# 0 0 Ltmp46: divsd DATAat0x4016b0(%rip), %xmm0 movsd %xmm1, 0x20(%rsp) movsd %xmm2, 0x30(%rsp) fstpt 0x10(%rsp) callq cos@PLT movsd 0x30(%rsp), %xmm2 movsd 0x20(%rsp), %xmm1 fldt 0x10(%rsp) ucomisd %xmm1, %xmm1 mulsd DATAat0x401780(%rip), %xmm2 fdivs DATAat0x401760(%rip) mulsd %xmm0, %xmm2 movsd %xmm2, 0x8(%rsp) movapd %xmm1, %xmm2 fld %st(0) fstpt 0x50(%rsp) fldl 0x8(%rsp) faddp %st, %st(1) fstpl (%rbx) Ltmp46_br: jp Ltmp41 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp46_br# 1 _Z10SolveCubicddddPiPd #Ltmp41# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp46_br# 1 _Z10SolveCubicddddPiPd #LFT12# 0 0 LFT12: LFT12_br: jne Ltmp41 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT12_br# 1 _Z10SolveCubicddddPiPd #Ltmp41# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT12_br# 1 _Z10SolveCubicddddPiPd #Ltmp44# 0 0 Ltmp44: movsd 0x48(%rsp), %xmm0 movsd %xmm1, 0x20(%rsp) addsd DATAat0x401788(%rip), %xmm0 movsd %xmm2, 0x30(%rsp) divsd DATAat0x4016b0(%rip), %xmm0 callq cos@PLT movsd 0x30(%rsp), %xmm2 fldt 0x50(%rsp) mulsd DATAat0x401780(%rip), %xmm2 movsd 0x20(%rsp), %xmm1 ucomisd %xmm1, %xmm1 mulsd %xmm0, %xmm2 movsd %xmm2, 0x8(%rsp) fldl 0x8(%rsp) faddp %st, %st(1) fstpl 0x8(%rbx) Ltmp44_br: jp Ltmp42 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp44_br# 1 _Z10SolveCubicddddPiPd #Ltmp42# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp44_br# 1 _Z10SolveCubicddddPiPd #LFT14# 0 0 LFT14: LFT14_br: jne Ltmp42 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT14_br# 1 _Z10SolveCubicddddPiPd #Ltmp42# 0 0 # FDATA: 1 _Z10SolveCubicddddPiPd #LFT14_br# 1 _Z10SolveCubicddddPiPd #Ltmp43# 0 0 Ltmp43: movsd 0x48(%rsp), %xmm0 movsd %xmm1, 0x20(%rsp) addsd DATAat0x401790(%rip), %xmm0 divsd DATAat0x4016b0(%rip), %xmm0 callq cos@PLT fldt 0x50(%rsp) movsd DATAat0x401780(%rip), %xmm2 movsd 0x20(%rsp), %xmm1 mulsd %xmm1, %xmm2 mulsd %xmm0, %xmm2 movsd %xmm2, 0x8(%rsp) fldl 0x8(%rsp) faddp %st, %st(1) fstpl 0x10(%rbx) addq $0x70, %rsp .cfi_def_cfa_offset 16 popq %rbx .cfi_def_cfa_offset 8 retq .cfi_def_cfa %rsp, 128 Ltmp42: movsd 0x60(%rsp), %xmm0 callq sqrt@PLT movapd %xmm0, %xmm1 Ltmp42_br: jmp Ltmp43 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp42_br# 1 _Z10SolveCubicddddPiPd #Ltmp43# 0 0 Ltmp41: movsd 0x60(%rsp), %xmm0 callq sqrt@PLT movsd 0x20(%rsp), %xmm1 movapd %xmm0, %xmm2 Ltmp41_br: jmp Ltmp44 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp41_br# 1 _Z10SolveCubicddddPiPd #Ltmp44# 0 0 Ltmp39: fstp %st(0) Ltmp39_br: jmp Ltmp45 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp39_br# 1 _Z10SolveCubicddddPiPd #Ltmp45# 0 0 Ltmp40: Ltmp40_br: fstp %st(0) # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp40_br# 1 _Z10SolveCubicddddPiPd #Ltmp45# 0 0 Ltmp45: movsd 0x60(%rsp), %xmm0 movsd %xmm1, 0x20(%rsp) callq sqrt@PLT movsd 0x20(%rsp), %xmm1 movapd %xmm0, %xmm2 movsd 0x48(%rsp), %xmm0 fldt 0x10(%rsp) Ltmp45_br: jmp Ltmp46 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp45_br# 1 _Z10SolveCubicddddPiPd #Ltmp46# 0 0 Ltmp38: fstpt 0x30(%rsp) fxch %st(1) movapd %xmm1, %xmm0 fstpt 0x10(%rsp) fstpt 0x20(%rsp) callq sqrt@PLT fldt 0x20(%rsp) fldt 0x10(%rsp) fldt 0x30(%rsp) fxch %st(1) fxch %st(2) fxch %st(1) Ltmp38_br: jmp Ltmp47 # FDATA: 1 _Z10SolveCubicddddPiPd #Ltmp38_br# 1 _Z10SolveCubicddddPiPd #Ltmp47# 0 0 .cfi_endproc .size _Z10SolveCubicddddPiPd, .-_Z10SolveCubicddddPiPd .section .rodata "DATAat0x401788": "DATAat0x401790": "DATAat0x401780": "DATAat0x401770": "DATAat0x40176c": "DATAat0x401760": "DATAat0x401768": "DATAat0x401778": "DATAat0x401764": "DATAat0x401798": "DATAat0x4017b0": "DATAat0x4017a0": .text .globl _Z5usqrtmP8int_sqrt .type _Z5usqrtmP8int_sqrt, %function _Z5usqrtmP8int_sqrt: # FDATA: 0 [unknown] 0 1 _Z5usqrtmP8int_sqrt 0 0 6 .cfi_startproc LBB02: xorl %r9d, %r9d xorl %eax, %eax LBB02_br: xorl %ecx, %ecx # FDATA: 1 _Z5usqrtmP8int_sqrt #LBB02_br# 1 _Z5usqrtmP8int_sqrt #Ltmp48# 0 0 Ltmp48: movq %rdi, %rdx leaq (%rax,%rax), %r10 leaq 0x1(,%rax,4), %r8 andl $0xc0000000, %edx shlq $0x2, %rdi shrq $0x1e, %rdx leaq 0x1(%r10), %rax leaq (%rdx,%rcx,4), %rdx movq %rdx, %rcx subq %r8, %rcx cmpq %r8, %rdx cmovbq %rdx, %rcx cmovbq %r10, %rax addl $0x1, %r9d cmpl $0x20, %r9d Ltmp48_br: jne Ltmp48 # FDATA: 1 _Z5usqrtmP8int_sqrt #Ltmp48_br# 1 _Z5usqrtmP8int_sqrt #Ltmp48# 0 0 # FDATA: 1 _Z5usqrtmP8int_sqrt #Ltmp48_br# 1 _Z5usqrtmP8int_sqrt #LFT0# 0 0 LFT0: movq %rax, (%rsi) retq .cfi_endproc .size _Z5usqrtmP8int_sqrt, .-_Z5usqrtmP8int_sqrt