// File: /workspace/github_cpp_makefile_star2_O3/andyn[P]libdlmm/./dlmm.hh
// Function: int& Dl::symbol<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const
T &symbol(std::string const &symbol_name,
              std::string const &version) const {
        // Convert a void pointer to a function pointer without warnings.
        // Since we're type punning, make sure that pointer sizes do not differ.
        assert(sizeof(void *) == sizeof(void (*)()));
        union {
            void *m_void;
            T *m_real;
        } ptr;

        ptr.m_void = dlvsym(m_library, symbol_name.c_str(), version.c_str());
        if (ptr.m_void == nullptr)
            throw std::runtime_error(std::string("Dl::symbol(\"" + symbol_name +
                                                 "\", \"" + version + "\"): ") +
                                     dlerror());

        return *ptr.m_real;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq (%rdi), %rdi
movq (%rsi), %rsi
movq (%rdx), %rdx
callq 0x20c0
testq %rax, %rax
je 0x3346
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x20a0
movq %rax, %rbx
leaq 0x1003(%rip), %rsi      # 0x435d
leaq 0x8(%rsp), %rdi
movq %r15, %rdx
callq 0x3586
leaq 0xffc(%rip), %rsi       # 0x436a
leaq 0x8(%rsp), %rdi
callq 0x2240
leaq 0x38(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x3399
movups (%rcx), %xmm0
movups %xmm0, (%r15)
jmp 0x33a6
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x88(%rsp), %rdi
movq %r14, %rdx
callq 0x36a3
leaq 0xf55(%rip), %rsi       # 0x432e
leaq 0x88(%rsp), %rdi
callq 0x2240
leaq 0x58(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x3409
movups (%rcx), %xmm0
movups %xmm0, (%r12)
jmp 0x3416
movq %rdx, 0x48(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x58(%rsp)
movq 0x8(%rax), %rdx
leaq 0x48(%rsp), %r14
movq %rdx, 0x8(%r14)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
callq 0x2140
movq %r14, %rdi
movq %rax, %rsi
callq 0x2240
leaq 0x78(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x3464
movups (%rcx), %xmm0
movups %xmm0, (%r13)
jmp 0x3471
movq %rdx, 0x68(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x78(%rsp)
movq 0x8(%rax), %rdx
leaq 0x68(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movb $0x1, %bpl
movq %rbx, %rdi
callq 0x21e0
xorl %ebp, %ebp
movq 0x2b4f(%rip), %rsi      # 0x5ff0
movq 0x2b18(%rip), %rdx      # 0x5fc0
movq %rbx, %rdi
callq 0x2200
movq %rax, %r14
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x34d2
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2160
jmp 0x34d2
movq %rax, %r14
movb $0x1, %bpl
movq 0x48(%rsp), %rdi
cmpq %r12, %rdi
je 0x34f1
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x2160
jmp 0x34f1
movq %rax, %r14
movb $0x1, %bpl
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x351a
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x2160
jmp 0x351a
movq %rax, %r14
movb $0x1, %bpl
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x3531
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x2160
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x354c
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2160
testb %bpl, %bpl
jne 0x3576
jmp 0x357e
movq %rax, %r14
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3576
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x2160
jmp 0x3576
movq %rax, %r14
movq %rbx, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x2220